package zaplog // LogLevel 定义日志级别类型 type LogLevel int8 const ( Debug LogLevel = iota - 1 Info Warn Error DPanic Panic Fatal ) type LogFileConfig struct { Filename string // 日志文件路径及名称(自动创建不存在的目录) FileSize_MB int // 文件大小限制(MB) FileBackup int // 最大保留日志文件数 FileAge_DAY int // 日志文件保留天数 Compress bool // 是否压缩日志 } type Config struct { JsonFormat bool // 是否使用JSON格式(默认false) DisableStdout bool // 是否禁用输出到标准输出(默认false) Mode LogLevel // 日志启用级别(使用上面定义的常量) DebugLog LogFileConfig // Debug日志配置 InfoLog LogFileConfig // Info日志配置 WarnLog LogFileConfig // Warn日志配置 ErrorLog LogFileConfig // Error日志配置 DPanicLog LogFileConfig // DPanic日志配置 PanicLog LogFileConfig // Panic日志配置 FatalLog LogFileConfig // Fatal日志配置 } var log_default = LogFileConfig{ Filename: "./log/Info", FileSize_MB: 5, FileBackup: 5, FileAge_DAY: 30, Compress: true, } // 辅助函数:应用默认值 func applyDefaults(target, source *LogFileConfig) { if target.Filename == "" { target.Filename = source.Filename } if target.FileSize_MB == 0 { target.FileSize_MB = source.FileSize_MB } if target.FileBackup == 0 { target.FileBackup = source.FileBackup } if target.FileAge_DAY == 0 { target.FileAge_DAY = source.FileAge_DAY } if !target.Compress && source.Compress { target.Compress = source.Compress } } func configDefault(config ...Config) Config { if len(config) == 0 { return Config{ DebugLog: log_default, InfoLog: log_default, WarnLog: log_default, ErrorLog: log_default, DPanicLog: log_default, PanicLog: log_default, FatalLog: log_default, } } cfg := config[0] // 应用默认值 if cfg.Mode < Debug || cfg.Mode > Fatal { cfg.Mode = Info } // 为每个日志级别应用默认值 applyDefaults(&cfg.DebugLog, &log_default) applyDefaults(&cfg.InfoLog, &log_default) applyDefaults(&cfg.WarnLog, &log_default) applyDefaults(&cfg.ErrorLog, &log_default) applyDefaults(&cfg.DPanicLog, &log_default) applyDefaults(&cfg.PanicLog, &log_default) applyDefaults(&cfg.FatalLog, &log_default) return cfg }