没有生成日志文件
环境 Windows
跟着教程,日志都有输出,但是 storage/logs/
下 没有日志文件生成 。
返回前面对照教程 pkg/logger/logger.go 文件,并没有发现错误。
// InitLogger 日志初始化
func InitLogger(filename string, maxSize, maxBackup, maxAge int, compress bool, logType string, level string) {
// 获取日志写入介质
writeSyncer := getLogWriter(filename, maxSize, maxBackup, maxAge, compress, logType)
// 设置日志等级,具体请见 config/log.go 文件
logLevel := new(zapcore.Level)
if err := logLevel.UnmarshalText([]byte(level)); err != nil {
fmt.Println("日志初始化错误,日志级别设置有误。请修改 config/log.go 文件中的 log.level 配置项")
}
// 初始化 core
core := zapcore.NewCore(getEncoder(), writeSyncer, logLevel)
// 初始化 Logger
Logger = zap.New(core,
zap.AddCaller(), // 调用文件和行号,内部使用 runtime.Caller
zap.AddCallerSkip(1), // 封装了一层,调用文件去除一层(runtime.Caller(1))
zap.AddStacktrace(zap.ErrorLevel), // Error 时才会显示 stacktrace
)
// 将自定义的 logger 替换为全局的 logger
// zap.L().Fatal() 调用时,就会使用我们自定的 Logger
zap.ReplaceGlobals(Logger)
}
// getLogWriter 日志记录介质。Gohub 中使用了两种介质,os.Stdout 和文件
func getLogWriter(filename string, maxSize, maxBackup, maxAge int, compress bool, logType string) zapcore.WriteSyncer {
// 如果配置了按照日期记录日志文件
if logType == "daily" {
logname := time.Now().Format("2006-01-02.log")
filename = strings.ReplaceAll(filename, "logs.log", logname)
}
// 滚动日志,详见 config/log.go
lumberJackLogger := &lumberjack.Logger{
Filename: filename,
MaxSize: maxSize,
MaxBackups: maxBackup,
MaxAge: maxAge,
Compress: compress,
}
// 配置输出介质
if app.IsLocal() {
// 本地开发终端打印和记录文件
return zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(lumberJackLogger))
} else {
// 生产环境只记录文件
return zapcore.AddSync(lumberJackLogger)
}
}
// getEncoder 设置日志存储格式
func getEncoder() zapcore.Encoder {
// 日志格式规则
encoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller", // 代码调用,如 paginator/paginator.go:148
FunctionKey: zapcore.OmitKey,
MessageKey: "message",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding, // 每行日志的结尾添加 "\n"
EncodeLevel: zapcore.CapitalLevelEncoder, // 日志级别名称大写,如 ERROR、INFO
EncodeTime: customTimeEncoder, // 时间格式,我们自定义为 2006-01-02 15:04:05
EncodeDuration: zapcore.SecondsDurationEncoder, // 执行时间,以秒为单位
EncodeCaller: zapcore.ShortCallerEncoder, // Caller 短格式,如:types/converter.go:17,长格式为绝对路径
}
// 本地环境配置
if app.IsLocal() {
// 终端输出的关键词高亮
encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
// 本地设置内置的 Console 解码器(支持 stacktrace 换行)
return zapcore.NewConsoleEncoder(encoderConfig)
}
// 线上环境使用 JSON 编码器
return zapcore.NewJSONEncoder(encoderConfig)
}
请问下该怎么找到问题?
推荐文章: