kit/log/zaplog/config.go

95 lines
2.3 KiB
Go

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
}