logging - 如何将 golang 登录到具有日志轮换的文件?

标签 logging go

我正在尝试编写一个将在远程服务器上运行的 Web 应用程序。我需要记录以捕获错误/调试/审核。 我发现有多个日志包可用于 golang,包括标准的“日志”包。但是,我需要满足三个要求:

  1. 日志文件需要轮换
  2. 它适用于包含的软件包 其中使用“日志”
  3. 它需要是跨平台的。开发环境是 Linux,需要部署在 Windows 上。

最佳答案

虽然@Crast 给出了很好的答案,但我也想提一下 - lumberjack记录器 Nate Finch我最终使用了。

这里是如何使用它:

  1. 首先,克隆 lumberjack存储库或以某种方式获取它。
  2. 对文件夹运行 go install 命令。
  3. 现在导入 go 的“log”包和“lumberjack 包”。

进口( “日志” “github.com/natefinch/lumberjack” )

  1. 现在像这样在你的代码中使用它:

在 main 之外,声明你的日志变量。

var errLog *log.Logger

内部主要:

e, err := os.OpenFile("./foo.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)

if err != nil {
    fmt.Printf("error opening file: %v", err)
    os.Exit(1)
}
errLog = log.New(e, "", log.Ldate|log.Ltime)
errLog.SetOutput(&lumberjack.Logger{
    Filename:   "./foo.log",
    MaxSize:    1,  // megabytes after which new file is created
    MaxBackups: 3,  // number of backups
    MaxAge:     28, //days
})

现在只要文件大小达到 1MB,就会创建一个新文件来保留以前的日志和当前时间戳,并且新日志将继续登录到 foo.log 文件中。此外,我已经使用 os.OpenFile 创建了该文件,但您可能不需要它,因为伐木 worker 内部会这样做,但我更喜欢这种方式。谢谢,希望对您有所帮助。 再次感谢@Crast 和 NateFinch .

关于logging - 如何将 golang 登录到具有日志轮换的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796021/

相关文章:

java - Tomcat 不会再创建访问日志 - AccessLogValve

Android 应用提交。删除日志记录的简单方法?

java - 如何使用 slf4j 记录器将日志打印到文件以进行调试和其他级别

go - 在 Golang 中扩展常量

python - 当日志文件夹超过最大大小时如何在日志文件夹中创建多个日志文件

winforms - Winforms,记录所有点击?

go - 为什么 golang 在 slice 和 map 之间的 `[]` 运算符上实现不同的行为?

http - golang `Host` 的 `URL.Host` 和 `http.Request` 有什么区别?

google-app-engine - Google Datastore - 看不到每个实体组限制每秒 1 次写入

api - 如何找到我网站的所有 API?