我在 macOS 上使用 logrus 和 lumberjack 作为日志文件。
logger := &lumberjack.Logger{
// Log path
Filename: filepath.Join(logFolder, "xxx.log"),
// Log size MB
MaxSize: 10,
// Backup count
MaxBackups: 3,
// expire days
// MaxAge: 28,
// gzip compress
Compress: false,
}
logrus.SetOutput(logger)
当我启动我的应用程序时,它将按预期创建日志文件。
但是,当我的应用程序运行时,我手动删除日志文件,因为我的应用程序继续运行,我希望它会重新创建日志文件,但是,日志文件没有创建。
但如果我重新启动我的应用程序,日志文件将再次创建。
那么我应该怎么做才能让我的应用程序(继续运行)在删除日志文件时重新创建并写入日志文件。
提前致谢。
最佳答案
这是使用 fsnotify
lib 监视日志文件的另一种方法。 fsnotify
监控 xxx.log 所在目录,当 xxx.log 被删除时告诉 lumberjack Rotate()
。
import (
"fmt"
"log"
"path/filepath"
"time"
"github.com/fsnotify/fsnotify"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
logPath := "./xxx.log"
logName := filepath.Base(logPath)
logger := &lumberjack.Logger{
// Log path
Filename: logPath,
// Log size MB
MaxSize: 10,
// Backup count
MaxBackups: 3,
// expire days
// MaxAge: 28,
// gzip compress
Compress: false,
}
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
defer watcher.Close()
go func() {
for event := range watcher.Events {
if event.Op&fsnotify.Remove == fsnotify.Remove &&
event.Name == logName {
log.Println("rotate log", event.Name)
logger.Rotate()
}
}
}()
err = watcher.Add(filepath.Dir(logPath))
if err != nil {
log.Fatal(err)
}
for {
logger.Write([]byte(fmt.Sprintf("current time:%v\n", time.Now())))
time.Sleep(3 * time.Second)
}
}
关于go - 如何在 macOS 上的 logrus/lumberjack 中自动重新创建日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69796031/