如何在Go库中实现惯用日志记录?

时间:2012-11-21 10:18:45

标签: logging go idioms idiomatic

在Go中执行日志记录的惯用方法是什么?

2 个答案:

答案 0 :(得分:11)

创建一个声明全局变量 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进行配置。唯一的区别是您必须更明确并导入日志包。

答案 1 :(得分:0)

我刚刚写了一个库,允许库使用库中的应用程序记录器。

该库旨在为所有最常用的记录器(zap,logrus,golog,内置go logger)提供包装。最重要的是,它是图书馆用户的选择。如果不想,他们不必显式配置记录器库。

请参阅: