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

lia*_*dee 10 logging idioms idiomatic go

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

lia*_*dee 11

创建一个声明全局变量记录器的文件.然后,使用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)
}
Run Code Online (Sandbox Code Playgroud)

example.go:

func test() {
    logger.Println("Logged")
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 如果只使用一个全局记录器,则可以跳过自己的记录器并使用日志包的函数,如log.Println等.您仍然可以使用log.SetFlags()对其进行配置. (11认同)