【问题标题】:How to implement idiomatic logging in a Go library?如何在 Go 库中实现惯用的日志记录?
【发布时间】:2012-11-09 13:44:31
【问题描述】:

在 Go 中执行登录的惯用方式是什么?

【问题讨论】:

  • 有很多第三方库提供了更多功能完整的实现。例如,在标准库中,我错过了自定义格式和日志级别(调试、信息、...)的便捷选项,最终我实现了自己的库 - go-log。看看吧。

标签: logging go idioms


【解决方案1】:

创建一个声明全局变量logger的文件。然后,使用 Go 的惯用 init() 函数在启动时初始化变量。

logger.go

package xxx

import (
    "log"
    "os"
)

var logger *log.Logger
func init() {
    logger = log.New(os.Stderr, "xxx: ", log.Ldate | log.Ltime | log.Lshortfile)
}

example.go

func test() {
    logger.Println("Logged")
}

此方法的好处是您可以使用可以从单个文件配置的单个记录器实现。

编辑: ThomasKappler 指出,如果您只使用单个全局记录器,则可以使用日志包的内置记录器并使用 SetFlags 对其进行配置。唯一的区别是您必须更明确并导入日志包。

【讨论】:

  • 如果你只使用一个全局记录器,你可以跳过自己制作,使用log.Println等日志包的功能。你仍然可以使用log.SetFlags()来配置它。
  • @ThomasKappler 谢谢,我不知道。我更喜欢使用这种方法,因为我可以在不破坏现有功能的情况下扩展记录器(另外我不必到处导入日志包)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2023-03-11
  • 2016-08-11
  • 2022-11-12
  • 1970-01-01
相关资源
最近更新 更多