我正在使用log个软件包,并且我想知道日志数据的默认目标是什么。我无法在任何地方找到它。我需要一个io编写器,并在每个日志之后专门调用它或它应该如何工作?
答案 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
变量,并设置其属性。