英文:
Rotation logs - How to add timestamp to log file name?
问题
以下是旋转日志的代码:
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
中添加时间戳?
英文:
Below code for rotation logs:
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()
}
Logs get created
How to add timestamp to dump.log
?
答案1
得分: 2
我试着理解Christian的建议。也许你可以尝试这样做。
w := zapcore.AddSync(&lumberjack.Logger{
Filename: logPath + fmt.Sprintf("/dump-%v.log", time.Now().Format(time.RFC822)),
MaxSize: maxSize, // 兆字节
MaxBackups: maxBackUp,
MaxAge: maxAge, // 天数
})
英文:
I try to understand what Christian suggests. Maybe you can try this.
w := zapcore.AddSync(&lumberjack.Logger{
Filename: logPath + fmt.Sprintf("/dump-%v.log", time.Now().Format(time.RFC822)),
MaxSize: maxSize, // megabytes
MaxBackups: maxBackUp,
MaxAge: maxAge, // days
})
答案2
得分: 1
你是否尝试过使用较小的MaxSize(或MaxAge)参数进行测试?
根据https://pkg.go.dev/gopkg.in/natefinch/lumberjack.v2#example-Logger.Rotate的说明,如果文件存在且小于MaxSize兆字节,Lumberjack将追加到第一个文件。当达到此限制时,会自动添加时间戳:
每当写入导致当前日志文件超过MaxSize兆字节时,当前文件将被关闭、重命名,并创建一个具有原始名称的新日志文件。
备份使用Logger给定的日志文件名,格式为
name-timestamp.ext
,其中name是没有扩展名的文件名,timestamp是日志轮换的时间,格式为2006-01-02T15-04-05.000
,扩展名是原始扩展名。例如,如果你的Logger.Filename是
/var/log/foo/server.log
,在2016年11月11日下午6:30创建的备份将使用文件名/var/log/foo/server-2016-11-04T18-30-00.000.log
如果文件存在且其大小>= MaxSize兆字节,则在文件的扩展名之前(或文件名末尾,如果没有扩展名)插入当前时间的时间戳来重命名文件。然后,使用原始文件名创建一个新的日志文件。
有一个开放的拉取请求可以自定义时间戳格式:https://github.com/natefinch/lumberjack/pull/118
英文:
Have you tested it with a smaller MaxSize (or MaxAge) parameter?
According to https://pkg.go.dev/gopkg.in/natefinch/lumberjack.v2#example-Logger.Rotate, Lumberjack will append to the first file if the file exists and is less than MaxSize megabytes. When this limit is reached, timestamps are automatically added:
> Whenever a write would cause the current log file exceed MaxSize megabytes, the current file is closed, renamed, and a new log file created with the original name.
>
> Backups use the log file name given to Logger, in the form name-timestamp.ext
where name is the filename without the extension, timestamp is the time at which the log was rotated formatted with the time.Time format of 2006-01-02T15-04-05.000
and the extension is the original extension.
>
> For example, if your Logger.Filename is /var/log/foo/server.log
, a backup created at 6:30pm on Nov 11 2016 would use the filename /var/log/foo/server-2016-11-04T18-30-00.000.log
>
> If the file exists and its size is >= MaxSize megabytes, the file is renamed by putting the current time in a timestamp in the name immediately before the file's extension (or the end of the filename if there's no extension). A new log file is then created using original filename.
There is an open pull request to be able to customize the time stamp format: https://github.com/natefinch/lumberjack/pull/118
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论