infra
/
goutils
Archived
1
0
Fork 0
This repository has been archived on 2022-04-06. You can view files and clone it, but cannot push or open issues or pull requests.
goutils/logger/zap/logger.go

115 lines
3.0 KiB
Go

package zap
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"amuz.es/src/infra/goutils/logger"
"amuz.es/src/infra/goutils/logger/rotater"
)
var (
defaultWriter logger.RotateSyncer
defaultErrorOutputOptions []zap.Option
nopCloser = func() (err error) { return }
)
func init() {
zap.RedirectStdLog(zap.L())
}
func replaceGlobalLogger(newOne *zap.Logger) {
zap.ReplaceGlobals(newOne)
zap.RedirectStdLog(newOne)
}
func Init(
verbose bool,
formatter zapcore.Encoder,
mainLogName, logFilename, logDir string,
rotateOption []rotater.Option,
logLevel zapcore.Level,
additionalOptions ...zap.Option,
) (*zap.SugaredLogger, error) {
level := zap.NewAtomicLevelAt(logLevel)
if defaultWriter, err := rotater.NewLogWriter(logFilename, logDir, rotateOption...); err != nil {
return nil, err
} else {
defaultErrorOutputOptions = []zap.Option{zap.ErrorOutput(defaultWriter)}
options := defaultErrorOutputOptions
if verbose {
options = append(options, zap.AddStacktrace(zap.NewAtomicLevelAt(zap.PanicLevel)))
}
// reset log option slice
options = append(options, additionalOptions...)
log := initLogger(defaultWriter, mainLogName, formatter, level, options...)
replaceGlobalLogger(log)
return log.Sugar(), nil
}
}
func New(parent *zap.SugaredLogger, moduleName string, options ...zap.Option) *zap.SugaredLogger {
var subLogger *zap.Logger
if parent == nil {
subLogger = zap.L().Named(moduleName)
} else {
subLogger = parent.Desugar().Named(moduleName)
}
subLogger.WithOptions(options...)
return subLogger.Sugar()
}
func NewOtherLogger(
formatter zapcore.Encoder,
moduleName, logFilename, logDir string,
rotateOption []rotater.Option,
logLevel zapcore.Level,
fields ...zapcore.Field,
) (logger *zap.SugaredLogger, closer func() error, err error) {
loglevel := zap.NewAtomicLevelAt(logLevel)
logWriter, err := rotater.NewLogWriter(logFilename, logDir, rotateOption...)
if err != nil {
return
}
core := zapcore.NewCore(formatter, logWriter, loglevel)
closer = logWriter.Close
logger = zap.New(core, defaultErrorOutputOptions...).
Named(moduleName).With(fields...).Sugar()
return
}
func NewOtherLoggerWithOption(
formatter zapcore.Encoder,
moduleName, logFilename, logDir string,
rotateOption []rotater.Option,
logLevel zapcore.Level,
options []zap.Option,
fields ...zapcore.Field,
) (logger *zap.SugaredLogger, closer func() error, err error) {
loglevel := zap.NewAtomicLevelAt(logLevel)
logWriter, err := rotater.NewLogWriter(logFilename, logDir, rotateOption...)
if err != nil {
return
}
core := zapcore.NewCore(formatter, logWriter, loglevel)
closer = logWriter.Close
options = append(defaultErrorOutputOptions, options...)
logger = zap.New(core, options...).
Named(moduleName).With(fields...).Sugar()
return
}
func initLogger(
writer zapcore.WriteSyncer,
moduleName string,
formatter zapcore.Encoder,
level zap.AtomicLevel,
options ...zap.Option,
) *zap.Logger {
core := zapcore.NewCore(formatter, writer, level)
return zap.New(core, options...).Named(moduleName)
}