42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package logging
|
|
|
|
import (
|
|
"os"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
import (
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
)
|
|
|
|
// newDefaultProductionLog configures a custom log that is
|
|
// intended for use by default if no other log is specified
|
|
// in a config. It writes to stderr, uses the console encoder,
|
|
// and enables INFO-level logs and higher.
|
|
func newDefaultProductionLog() *zap.Logger {
|
|
encCfg := zap.NewProductionEncoderConfig()
|
|
// if interactive terminal, make output more human-readable by default
|
|
encCfg.EncodeTime = func(ts time.Time, encoder zapcore.PrimitiveArrayEncoder) {
|
|
encoder.AppendString(ts.Format("2006/01/02 15:04:05.000"))
|
|
}
|
|
encCfg.EncodeLevel = zapcore.CapitalColorLevelEncoder
|
|
enc := zapcore.NewConsoleEncoder(encCfg)
|
|
core := zapcore.NewCore(enc, zapcore.Lock(os.Stdout), zap.NewAtomicLevelAt(zap.DebugLevel))
|
|
return zap.New(core)
|
|
|
|
}
|
|
|
|
// Log returns the current default logger.
|
|
func Log() *zap.Logger {
|
|
defaultLoggerMu.RLock()
|
|
defer defaultLoggerMu.RUnlock()
|
|
return defaultLogger
|
|
}
|
|
|
|
var (
|
|
defaultLogger = newDefaultProductionLog()
|
|
defaultLoggerMu sync.RWMutex
|
|
)
|