You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package logr
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
// CustomFilter allows targets to enable logging via a list of discrete levels.
|
|
type CustomFilter struct {
|
|
mux sync.RWMutex
|
|
levels map[LevelID]Level
|
|
}
|
|
|
|
// NewCustomFilter creates a filter supporting discrete log levels.
|
|
func NewCustomFilter(levels ...Level) *CustomFilter {
|
|
filter := &CustomFilter{}
|
|
filter.Add(levels...)
|
|
return filter
|
|
}
|
|
|
|
// GetEnabledLevel returns the Level with the specified Level.ID and whether the level
|
|
// is enabled for this filter.
|
|
func (cf *CustomFilter) GetEnabledLevel(level Level) (Level, bool) {
|
|
cf.mux.RLock()
|
|
defer cf.mux.RUnlock()
|
|
levelEnabled, ok := cf.levels[level.ID]
|
|
|
|
if ok && levelEnabled.Name == "" {
|
|
levelEnabled.Name = level.Name
|
|
}
|
|
|
|
return levelEnabled, ok
|
|
}
|
|
|
|
// Add adds one or more levels to the list. Adding a level enables logging for
|
|
// that level on any targets using this CustomFilter.
|
|
func (cf *CustomFilter) Add(levels ...Level) {
|
|
cf.mux.Lock()
|
|
defer cf.mux.Unlock()
|
|
|
|
if cf.levels == nil {
|
|
cf.levels = make(map[LevelID]Level)
|
|
}
|
|
|
|
for _, s := range levels {
|
|
cf.levels[s.ID] = s
|
|
}
|
|
}
|