【问题标题】:Rotate log file in golang with systemd使用 systemd 在 golang 中旋转日志文件
【发布时间】:2017-10-21 15:25:41
【问题描述】:

使用 go 中的默认日志,但发现两个问题,即日志轮换和使用 systemd 运行程序时未打印日志。 所以我尝试使用如下库:

https://github.com/alecthomas/log4go
https://github.com/natefinch/lumberjack

log4go

似乎是一个完美的日志库,因为它提供了最大尺寸和旋转线。然而,当将 rotate 设置为 true 时,它​​确实创建了新的日志文件,但出现错误,然后应用程序终止。

FileLogWriter("logs/app.log"): 旋转:重命名 logs/stream.log logs/app.log.2017-05-21.001:进程无法访问文件 因为它正被另一个进程使用。

配置:

logger:=log4go.NewDefaultLogger(log4go.DEBUG)
logger.AddFilter("log", log4go.FINE,  log4go.NewFileLogWriter("/log/app.log", true))
logger.Info("success")

还修改了现有库并将每天设置为 true,以便在旋转时在文件上显示日期

伐木工人

接下来我尝试了这个库。很高兴找到,因为除了添加 struct log 配置之外别无他法。运行良好,因为日志文件没有比参数指定的更大,但是没有创建新文件的迹象。配置

var PrintLog *log.Logger

func main() {
    _ = os.Mkdir(property.AppProperties.Logging.Path, os.ModePerm)
    f, e := os.OpenFile(logFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666)
    if e != nil {
        fmt.Printf("error opening file: %v", e)
    }
    PrintLog = log.New(f, "", log.Ldate|log.Ltime)
    l:= &lumberjack.Logger{
        Filename:   logFile,
        MaxSize:    2, // megabytes
        MaxBackups: 3,
        MaxAge:     20, //days
    }
    log.SetOutput(l)

}

我错过了什么?

【问题讨论】:

  • Systemd 日志记录是关于捕获标准输出。 Systemd 使用 journald 处理日志轮换。为了在 systemd 日志中获取日志内容,只需在 stdout 上写入信息,然后使用journalctl -u myservice查看日志

标签: logging go systemd


【解决方案1】:

伐木工人 如果不知道property.AppProperties.Logging.PathlogFile 的值,很难知道这里出了什么问题。此外,您正在以 WRONLY(只写)和 RDWR(读写)方式打开文件。

试试os.OpenFile(logFile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)

log4go 似乎没有维护。但这可能是错误的来源: https://github.com/alecthomas/log4go/blob/master/filelog.go#L169

也许您的应用中还有另一个日志记录实现可以仍在使用该文件? filelog.go 似乎在尝试重命名之前关闭了文件。

12 因素方式考虑这一点也可能有用。 https://12factor.net/logs

十二因素应用程序从不关心路由或存储 它的输出流。

并将日志轮换卸载到另一个从标准输出读取的进程,例如systemd、docker、logstash

【讨论】:

    【解决方案2】:

    systemd 的建议是登录到 STDOUT,systemd 会自动为您捕获并存储在日志中,journalctl -u yourproject.service 可以访问。它还为您处理日志轮换。

    更多信息,您可以查看man journalctlman journald.conf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多