Adds Advanced Logging to server. Advanced Logging is an optional logging capability that allows customers to send log records to any number of destinations. Supported destinations: - file - syslog (with out without TLS) - raw TCP socket (with out without TLS) Allows developers to specify discrete log levels as well as the standard trace, debug, info, ... panic. Existing code and logging API usage is unchanged. Log records are emitted asynchronously to reduce latency to the caller. Supports hot-reloading of logger config, including adding removing targets. Advanced Logging is configured within config.json via "LogSettings.AdvancedLoggingConfig" which can contain a filespec to another config file, a database DSN, or JSON.
46 строки
1001 B
Go
46 строки
1001 B
Go
package logr
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
// CustomFilter allows targets to enable logging via a list of levels.
|
|
type CustomFilter struct {
|
|
mux sync.RWMutex
|
|
levels map[LevelID]Level
|
|
}
|
|
|
|
// IsEnabled returns true if the specified Level exists in this list.
|
|
func (st *CustomFilter) IsEnabled(level Level) bool {
|
|
st.mux.RLock()
|
|
defer st.mux.RUnlock()
|
|
_, ok := st.levels[level.ID]
|
|
return ok
|
|
}
|
|
|
|
// IsStacktraceEnabled returns true if the specified Level requires a stack trace.
|
|
func (st *CustomFilter) IsStacktraceEnabled(level Level) bool {
|
|
st.mux.RLock()
|
|
defer st.mux.RUnlock()
|
|
lvl, ok := st.levels[level.ID]
|
|
if ok {
|
|
return lvl.Stacktrace
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Add adds one or more levels to the list. Adding a level enables logging for
|
|
// that level on any targets using this CustomFilter.
|
|
func (st *CustomFilter) Add(levels ...Level) {
|
|
st.mux.Lock()
|
|
defer st.mux.Unlock()
|
|
|
|
if st.levels == nil {
|
|
st.levels = make(map[LevelID]Level)
|
|
}
|
|
|
|
for _, s := range levels {
|
|
st.levels[s.ID] = s
|
|
}
|
|
}
|