zap日志库
This commit is contained in:
87
golang/logUse/zap-log.go
Normal file
87
golang/logUse/zap-log.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"gopkg.in/natefinch/lumberjack.v2"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 创建 lumberjack 文件轮转器
|
||||
fileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{
|
||||
Filename: "zap.log",
|
||||
MaxSize: 1, // MB
|
||||
MaxBackups: 3, // 最多保留3个备份
|
||||
MaxAge: 30, // 最大保存天数
|
||||
Compress: true, // 是否压缩
|
||||
})
|
||||
|
||||
// 创建多个输出目标
|
||||
consoleSyncer := zapcore.Lock(os.Stdout)
|
||||
fileSyncer := zapcore.Lock(fileWriteSyncer)
|
||||
|
||||
// 配置编码器
|
||||
encoderConfig := zapcore.EncoderConfig{
|
||||
TimeKey: "time",
|
||||
LevelKey: "level",
|
||||
NameKey: "logger",
|
||||
CallerKey: "caller",
|
||||
FunctionKey: zapcore.OmitKey,
|
||||
MessageKey: "msg",
|
||||
StacktraceKey: "stacktrace",
|
||||
LineEnding: zapcore.DefaultLineEnding,
|
||||
EncodeLevel: zapcore.CapitalColorLevelEncoder, // 控制台带颜色
|
||||
EncodeTime: zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05.000"),
|
||||
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||
EncodeCaller: zapcore.ShortCallerEncoder,
|
||||
}
|
||||
|
||||
// 文件编码器(无颜色)
|
||||
fileEncoderConfig := encoderConfig
|
||||
fileEncoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder // 文件不要颜色
|
||||
|
||||
// 创建多个 core
|
||||
consoleCore := zapcore.NewCore(
|
||||
zapcore.NewConsoleEncoder(encoderConfig), // 控制台用 ConsoleEncoder
|
||||
consoleSyncer,
|
||||
zap.InfoLevel,
|
||||
)
|
||||
|
||||
fileCore := zapcore.NewCore(
|
||||
zapcore.NewConsoleEncoder(fileEncoderConfig), // 文件也用 ConsoleEncoder,但无颜色
|
||||
fileSyncer,
|
||||
zap.InfoLevel,
|
||||
)
|
||||
|
||||
// 使用 tee 将日志同时输出到控制台和文件
|
||||
core := zapcore.NewTee(consoleCore, fileCore)
|
||||
|
||||
// 创建 logger
|
||||
logger := zap.New(core, zap.AddCaller())
|
||||
defer logger.Sync() // 程序退出时刷新缓冲区
|
||||
|
||||
logger.Info("水电费水电费。")
|
||||
|
||||
sugar := logger.Sugar()
|
||||
|
||||
// 记录日志
|
||||
sugar.Info("This is an info message")
|
||||
sugar.Warn("This is a warning message")
|
||||
sugar.Error("This is an error message")
|
||||
|
||||
// 测试带字段的日志
|
||||
sugar.With(
|
||||
zap.String("component", "auth"),
|
||||
zap.Int("user_id", 12345),
|
||||
zap.String("ip", "192.168.1.100"),
|
||||
).Info("User login success")
|
||||
|
||||
// 如果需要更结构化的日志,可以使用非 sugar 版本(性能更高)
|
||||
// logger.Info("Structured logging example",
|
||||
// zap.String("component", "api"),
|
||||
// zap.Int("status", 200),
|
||||
// zap.Duration("duration", zap.Duration("latency", 150)),
|
||||
// )
|
||||
}
|
||||
Reference in New Issue
Block a user