在哪里记录错误?

时间:2014-05-09 00:00:52

标签: logging go

我正在使用log个软件包,并且我想知道日志数据的默认目标是什么。我无法在任何地方找到它。我需要一个io编写器,并在每个日志之后专门调用它或它应该如何工作?

1 个答案:

答案 0 :(得分:5)

应该是stdErr,如line 58 of log.go

var std = New(os.Stderr, "", LstdFlags)

所以像Fatal()这样的包方法默认使用std:

// Fatal is equivalent to Print() followed by a call to os.Exit(1).
func Fatal(v ...interface{}) {
    std.Output(2, fmt.Sprint(v...))
    os.Exit(1)
}

博客文章" How to write Go packages coders will love " (由Baron Schwartz撰写)引用了这种技术:

  

我在标准Go库中找到的模式之一就是我所说的package-and-object。 (这是我自己的名字;也许我正在重新发明或命名另一个名字已经知道的东西。)你可以在几个包中看到这个成语。它使这些包使用起来很愉快。

     

成语的本质是你像往常一样用方法设计一个类型,然后你也在包级别放置匹配的函数。这些函数只是委托给一个私有包级变量类型的默认实例,该变量是在init()函数中创建的。

     

要查看默认日志记录功能,例如,您只需导入log包,然后编写log.Print()之类的内容。它非常简洁,方便,而且做得对   想要自定义吗?制作您自己的log.Logger变量,并设置其属性。