35 lines
882 B
Go
35 lines
882 B
Go
package logger
|
|
|
|
import (
|
|
"os"
|
|
|
|
"mengstack/internal/config"
|
|
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
)
|
|
|
|
func New(cfg config.LogConfig) (*zap.Logger, error) {
|
|
var level zapcore.Level
|
|
if err := level.UnmarshalText([]byte(cfg.Level)); err != nil {
|
|
level = zapcore.InfoLevel
|
|
}
|
|
|
|
encoderConfig := zap.NewProductionEncoderConfig()
|
|
encoderConfig.TimeKey = "time"
|
|
encoderConfig.MessageKey = "msg"
|
|
encoderConfig.LevelKey = "level"
|
|
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
|
encoderConfig.EncodeLevel = zapcore.LowercaseLevelEncoder
|
|
|
|
var encoder zapcore.Encoder
|
|
if cfg.Format == "console" {
|
|
encoder = zapcore.NewConsoleEncoder(encoderConfig)
|
|
} else {
|
|
encoder = zapcore.NewJSONEncoder(encoderConfig)
|
|
}
|
|
|
|
core := zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), level)
|
|
return zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel)), nil
|
|
}
|