增加了控制台输出控制配置

v0.0.9
cc 2025-05-04 23:28:48 +08:00
parent e7dfeffb3a
commit b6a3db139b
2 changed files with 49 additions and 30 deletions

View File

@ -1,7 +1,10 @@
package zaplog package zaplog
// LogLevel 定义日志级别类型
type LogLevel int8
const ( const (
Debug int8 = iota - 1 Debug LogLevel = iota - 1
Info Info
Warn Warn
Error Error
@ -20,7 +23,8 @@ type LogFileConfig struct {
type Config struct { type Config struct {
JsonFormat bool // 是否使用JSON格式(默认false) JsonFormat bool // 是否使用JSON格式(默认false)
Mode int8 // 日志启用级别(使用上面定义的常量) DisableStdout bool // 是否禁用输出到标准输出(默认false)
Mode LogLevel // 日志启用级别(使用上面定义的常量)
DebugLog LogFileConfig // Debug日志配置 DebugLog LogFileConfig // Debug日志配置
InfoLog LogFileConfig // Info日志配置 InfoLog LogFileConfig // Info日志配置
WarnLog LogFileConfig // Warn日志配置 WarnLog LogFileConfig // Warn日志配置
@ -30,14 +34,12 @@ type Config struct {
FatalLog LogFileConfig // Fatal日志配置 FatalLog LogFileConfig // Fatal日志配置
} }
var cfg_default = Config{ var log_default = LogFileConfig{
DebugLog: LogFileConfig{
Filename: "./log/Info", Filename: "./log/Info",
FileSize_MB: 5, FileSize_MB: 5,
FileBackup: 5, FileBackup: 5,
FileAge_DAY: 30, FileAge_DAY: 30,
Compress: true, Compress: true,
},
} }
// 辅助函数:应用默认值 // 辅助函数:应用默认值
@ -61,19 +63,32 @@ func applyDefaults(target, source *LogFileConfig) {
func configDefault(config ...Config) Config { func configDefault(config ...Config) Config {
if len(config) == 0 { if len(config) == 0 {
return cfg_default 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] cfg := config[0]
// 应用默认值
if cfg.Mode < Debug || cfg.Mode > Fatal {
cfg.Mode = Info
}
// 为每个日志级别应用默认值 // 为每个日志级别应用默认值
applyDefaults(&cfg.DebugLog, &cfg_default.DebugLog) applyDefaults(&cfg.DebugLog, &log_default)
applyDefaults(&cfg.InfoLog, &cfg_default.DebugLog) applyDefaults(&cfg.InfoLog, &log_default)
applyDefaults(&cfg.WarnLog, &cfg_default.DebugLog) applyDefaults(&cfg.WarnLog, &log_default)
applyDefaults(&cfg.ErrorLog, &cfg_default.DebugLog) applyDefaults(&cfg.ErrorLog, &log_default)
applyDefaults(&cfg.DPanicLog, &cfg_default.DebugLog) applyDefaults(&cfg.DPanicLog, &log_default)
applyDefaults(&cfg.PanicLog, &cfg_default.DebugLog) applyDefaults(&cfg.PanicLog, &log_default)
applyDefaults(&cfg.FatalLog, &cfg_default.DebugLog) applyDefaults(&cfg.FatalLog, &log_default)
return cfg return cfg
} }

View File

@ -77,7 +77,7 @@ func New(config ...Config) *zap.SugaredLogger {
// 创建核心的函数 // 创建核心的函数
createCore := func(level zapcore.Level, logConfig LogFileConfig) zapcore.Core { createCore := func(level zapcore.Level, logConfig LogFileConfig) zapcore.Core {
// 生成缓存键 // 生成缓存键
cacheKey := fmt.Sprintf("%s:%d:%d:%d:%v", logConfig.Filename, logConfig.FileSize_MB, logConfig.FileBackup, logConfig.FileAge_DAY, true) cacheKey := fmt.Sprintf("%s:%d:%d:%d:%v", logConfig.Filename, logConfig.FileSize_MB, logConfig.FileBackup, logConfig.FileAge_DAY, logConfig.Compress)
// 获取或创建写入器 // 获取或创建写入器
var ws zapcore.WriteSyncer var ws zapcore.WriteSyncer
@ -89,13 +89,17 @@ func New(config ...Config) *zap.SugaredLogger {
logConfig.FileSize_MB, logConfig.FileSize_MB,
logConfig.FileBackup, logConfig.FileBackup,
logConfig.FileAge_DAY, logConfig.FileAge_DAY,
true, logConfig.Compress,
) )
wsCache[cacheKey] = ws wsCache[cacheKey] = ws
} }
// 创建多写入器(文件+控制台) var multiWs zapcore.WriteSyncer
multiWs := zapcore.NewMultiWriteSyncer(ws, zapcore.AddSync(os.Stdout)) if cfg.DisableStdout {
multiWs = ws
} else {
multiWs = zapcore.NewMultiWriteSyncer(ws, zapcore.AddSync(os.Stdout))
}
// 创建级别过滤器 // 创建级别过滤器
priority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { priority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool {