go日志框架zap配置示例(正在使用)
package log
import (
"fmt"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"os"
"time"
)
var (
errorLogger *zap.SugaredLogger
atom zap.AtomicLevel
)
func TimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format("2006-01-02 15:04:05.000"))
}
func init() {
atom = zap.NewAtomicLevel()
fileName := fmt.Sprintf("./log/%04d-%02d-%02d.log", time.Now().Year(), time.Now().Month(), time.Now().Day())
syncWriter := zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(&lumberjack.Logger{
Filename: fileName,
MaxSize: 500, // megabytes
MaxBackups: 3,
MaxAge: 28, // days
LocalTime: true,
}))
encoderConfig := zapcore.EncoderConfig{
TimeKey: "T",
LevelKey: "L",
NameKey: "N",
CallerKey: "C",
MessageKey: "M",
StacktraceKey: "S",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.CapitalLevelEncoder,
EncodeTime: TimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
core := zapcore.NewCore(
zapcore.NewConsoleEncoder(encoderConfig),
syncWriter,
atom,
)
logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
errorLogger = logger.Sugar()
}
func SetLogLevel(level zapcore.Level) {
atom.SetLevel(level)
}
func Debug(args ...interface{}) {
errorLogger.Debug(args...)
}
func Debugf(template string, args ...interface{}) {
errorLogger.Debugf(template, args...)
}
func Info(args ...interface{}) {
errorLogger.Info(args...)
}
func Infof(template string, args ...interface{}) {
errorLogger.Infof(template, args...)
}
func Warn(args ...interface{}) {
errorLogger.Warn(args...)
}
func Warnf(template string, args ...interface{}) {
errorLogger.Warnf(template, args...)
}
func Error(args ...interface{}) {
errorLogger.Error(args...)
}
func Errorf(template string, args ...interface{}) {
errorLogger.Errorf(template, args...)
}
func DPanic(args ...interface{}) {
errorLogger.DPanic(args...)
}
func DPanicf(template string, args ...interface{}) {
errorLogger.DPanicf(template, args...)
}
func Panic(args ...interface{}) {
errorLogger.Panic(args...)
}
func Panicf(template string, args ...interface{}) {
errorLogger.Panicf(template, args...)
}
func Fatal(args ...interface{}) {
errorLogger.Fatal(args...)
}
func Fatalf(template string, args ...interface{}) {
errorLogger.Fatalf(template, args...)
}
调用
log.Infof("admin listening on %v", addr)
打印结果:
2019-04-30 10:36:23.397 INFO core/admin.go:59 admin listening on :8101
