From 523f48e066e86aca83ca25be726aeb41c08bba45 Mon Sep 17 00:00:00 2001 From: xc Date: Mon, 1 Sep 2025 13:51:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8zag=E4=BD=9C=E4=B8=BA?= =?UTF-8?q?=E6=97=A5=E5=BF=97=EF=BC=8C=E5=B9=B6=E5=8A=A0=E5=85=A5=E8=BD=AE?= =?UTF-8?q?=E8=BD=AC=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scagent/go.mod | 5 +++- scagent/go.sum | 2 ++ scagent/util/xttlog.go | 62 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 scagent/util/xttlog.go diff --git a/scagent/go.mod b/scagent/go.mod index f608380..61c34bf 100644 --- a/scagent/go.mod +++ b/scagent/go.mod @@ -2,6 +2,9 @@ module scagnet go 1.22.1 -require go.uber.org/zap v1.27.0 +require ( + go.uber.org/zap v1.27.0 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 +) require go.uber.org/multierr v1.10.0 // indirect diff --git a/scagent/go.sum b/scagent/go.sum index 2d29b57..853bbba 100644 --- a/scagent/go.sum +++ b/scagent/go.sum @@ -10,5 +10,7 @@ go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/scagent/util/xttlog.go b/scagent/util/xttlog.go new file mode 100644 index 0000000..20ce397 --- /dev/null +++ b/scagent/util/xttlog.go @@ -0,0 +1,62 @@ +package util + +import ( + "os" + "time" + + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "gopkg.in/natefinch/lumberjack.v2" +) + +// 初始化生产级日志器 +func NewProductionLogger() *zap.Logger { + // 1. 配置日志轮转(用lumberjack) + hook := &lumberjack.Logger{ + + Filename: "./logs/app.log", // 日志文件路径 + MaxSize: 100, // 单个文件最大大小(MB) + MaxBackups: 7, // 最多保留多少个备份文件 + MaxAge: 7, // 日志文件最多保留多少天 + Compress: true, // 是否压缩备份文件(gzip) + } + defer hook.Close() + + // 2. 设置日志输出格式 + // 时间格式:2024-05-20 09:30:00.123 + timeFormat := "2006-01-02 15:04:05.000" + encoderConfig := zapcore.EncoderConfig{ + TimeKey: "ts", + LevelKey: "level", + NameKey: "logger", + CallerKey: "caller", + MessageKey: "msg", + StacktraceKey: "stacktrace", + LineEnding: zapcore.DefaultLineEnding, + EncodeLevel: zapcore.CapitalLevelEncoder, // 级别用大写(INFO、ERROR) + EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { + enc.AppendString(t.Format(timeFormat)) + }, + EncodeDuration: zapcore.SecondsDurationEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, // 调用者信息简化(main/main.go:20) + } + + // 3. 配置日志级别和输出目标 + // 输出目标:同时打印到控制台和文件 + core := zapcore.NewCore( + zapcore.NewJSONEncoder(encoderConfig), // JSON格式 + zapcore.NewMultiWriteSyncer( + zapcore.AddSync(hook), // 写入文件 + zapcore.AddSync(zapcore.Lock(os.Stdout)), // 打印到控制台 + ), + zapcore.InfoLevel, // 生产环境只打印Info及以上级别 + ) + + // 4. 开启调用者信息和堆栈跟踪 + logger := zap.New(core, + zap.AddCaller(), // 显示日志调用的文件和行号 + zap.AddStacktrace(zapcore.ErrorLevel), // 只有Error及以上级别才显示堆栈 + ) + + return logger +}