Browse Source

使用zag作为日志,并加入轮转模式

master
xyiege 5 months ago
parent
commit
523f48e066
  1. 5
      scagent/go.mod
  2. 2
      scagent/go.sum
  3. 62
      scagent/util/xttlog.go

5
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

2
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=

62
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
}
Loading…
Cancel
Save