package logger import ( "io" "log/slog" "os" "strings" ) import ( "gopkg.in/natefinch/lumberjack.v2" ) import ( "protocol-server/common" ) var lumberJackLogger *lumberjack.Logger var logger *slog.Logger func SetupLogger(persisted bool) { //设置日志级别 var level = new(slog.LevelVar) switch common.LoggerConfig.LogLevel { case "DEBUG": level.Set(slog.LevelDebug) case "INFO": level.Set(slog.LevelInfo) case "WARN": level.Set(slog.LevelWarn) case "ERROR": level.Set(slog.LevelError) default: level.Set(slog.LevelInfo) } opts := &slog.HandlerOptions{ Level: level, AddSource: true, } filename := common.LoggerConfig.LogDir + "/protocol.log" if strings.HasSuffix(common.LoggerConfig.LogDir, "/") { filename = common.LoggerConfig.LogDir + "protocol.log" } lumberJackLogger = &lumberjack.Logger{ Filename: filename, //日志文件的位置 MaxSize: common.LoggerConfig.MaxSize, //在进行切割之前,日志文件的最大大小(以MB为单位) MaxBackups: common.LoggerConfig.MaxBackups, //最多保留文件个数 MaxAge: common.LoggerConfig.MaxAge, //保留旧文件的最大天数 Compress: common.LoggerConfig.Compress, //是否压缩/归档旧文件 LocalTime: true, } if persisted { if common.LoggerConfig.Stdout { logger = slog.New(slog.NewTextHandler(io.MultiWriter(lumberJackLogger, os.Stdout), opts)) } else { logger = slog.New(slog.NewTextHandler(lumberJackLogger, opts)) } } else { logger = slog.New(slog.NewTextHandler(os.Stdout, opts)) } slog.SetDefault(logger) //todo 输出到robot slog.Info("setup logger ok", "level", level.String(), "filename", filename, "max size", common.LoggerConfig.MaxSize, "max backups", common.LoggerConfig.MaxBackups, "max age", common.LoggerConfig.MaxAge, "compress", common.LoggerConfig.Compress, ) } func ShutdownLogger() { lumberJackLogger.Rotate() } func WithGroup(name string) *slog.Logger { return logger.WithGroup(name) } func With(args ...any) *slog.Logger { return logger.With(args) }