You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

日志轮转:如何为日志文件名添加时间戳?

为Zap日志添加时间戳

原始日志轮转代码

package main

import (
    "os"

    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    lumberjack "gopkg.in/natefinch/lumberjack.v2"
)

func main() {
    logPath, _ := os.Getwd()
    log := NewLoggerFp(logPath, 1, 2, 2)

    log.Infof("sjkshfjsdf\n")
    log.Infof("sjkshfjsdf\n")
    log.Infof("sjkshfjsdf\n")
}

func NewLoggerFp(logPath string, maxSize, maxBackUp, maxAge int) *zap.SugaredLogger {
    w := zapcore.AddSync(&lumberjack.Logger{
        Filename:   logPath + "/dump.log",
        MaxSize:    maxSize, // megabytes
        MaxBackups: maxBackUp,
        MaxAge:     maxAge, // days
    })

    core := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        w,
        zap.InfoLevel,
    )

    return zap.New(core).Sugar()
}

问题

目前日志已正常生成,请问如何为日志文件dump.log添加时间戳?

解决方案

要给日志条目添加时间戳,只需自定义Zap的EncoderConfig,配置时间字段的键名和编码格式即可。修改NewLoggerFp函数中的编码器配置部分:

func NewLoggerFp(logPath string, maxSize, maxBackUp, maxAge int) *zap.SugaredLogger {
    w := zapcore.AddSync(&lumberjack.Logger{
        Filename:   logPath + "/dump.log",
        MaxSize:    maxSize, // megabytes
        MaxBackups: maxBackUp,
        MaxAge:     maxAge, // days
    })

    // 自定义编码器配置,添加时间戳
    encoderConfig := zap.NewProductionEncoderConfig()
    // 设置时间字段的键名,可自定义为易读的名称
    encoderConfig.TimeKey = "timestamp"
    // 使用ISO8601标准时间格式
    encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
    // 可选:自定义时间格式,比如"2006-01-02 15:04:05"
    // encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
    //     enc.AppendString(t.Format("2006-01-02 15:04:05"))
    // }

    core := zapcore.NewCore(
        zapcore.NewJSONEncoder(encoderConfig),
        w,
        zap.InfoLevel,
    )

    return zap.New(core).Sugar()
}

说明

  • TimeKey:指定日志中时间戳对应的字段名,默认Production配置为ts,这里改为更直观的timestamp。
  • EncodeTime:定义时间编码格式,zapcore.ISO8601TimeEncoder生成2024-05-20T14:30:00Z格式;如需自定义格式,通过匿名函数调用time.Time.Format实现即可。

修改后生成的日志条目示例:

{"timestamp":"2024-05-20T14:30:00Z","level":"info","msg":"sjkshfjsdf"}

内容的提问来源于stack exchange,提问作者overexchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:03:30