2 回答
TA贡献1811条经验 获得超6个赞
假设您的代码使用日志库在任何地方报告错误,您可以更改默认记录器写入的文件,而不是定义您自己的日志对象并将其传递。这是通过日志库的SetOutput()函数完成的。
这样,以下代码只会写入您的日志文件而不是标准错误:
// Call this when your program starts and pass it the file handle for your
// log file.
func SetupErrorLog(logFile io.Writer) {
log.SetOutput(logFile)
}
...
func DoSomething() {
...
if err != nil {
// prints to your log file and exits
log.Fatalln("A fatal error has occurred:", err)
}
}
如果您没有统一使用日志库并且想要捕获所有输出(如恐慌),则接受的答案有效。但是,我更喜欢一种更简单的方法,而不会通过在调用程序时使用记录器之类的工具来使代码复杂化:
go run MainPackageFile.go 2>&1 | logger
这会将您程序的所有输出发送到 syslog,而不必弄乱您的代码。logger 命令有许多选项来自定义日志记录行为,包括选择您自己的日志文件的能力。阅读记录器手册页以获取更多信息。
记录器命令在 Unix 系统(包括 Mac)上可用。Windows 解决方案可能略有不同。
TA贡献1993条经验 获得超5个赞
假设您的代码使用日志库在任何地方报告错误,您可以更改默认记录器写入的文件,而不是定义您自己的日志对象并将其传递。这是通过日志库的SetOutput()函数完成的。
这样,以下代码只会写入您的日志文件而不是标准错误:
// Call this when your program starts and pass it the file handle for your
// log file.
func SetupErrorLog(logFile io.Writer) {
log.SetOutput(logFile)
}
...
func DoSomething() {
...
if err != nil {
// prints to your log file and exits
log.Fatalln("A fatal error has occurred:", err)
}
}
如果您没有统一使用日志库并且想要捕获所有输出(如恐慌),则接受的答案有效。但是,我更喜欢一种更简单的方法,而不会通过在调用程序时使用记录器之类的工具来使代码复杂化:
go run MainPackageFile.go 2>&1 | logger
这会将您程序的所有输出发送到 syslog,而不必弄乱您的代码。logger 命令有许多选项来自定义日志记录行为,包括选择您自己的日志文件的能力。阅读记录器手册页以获取更多信息。
记录器命令在 Unix 系统(包括 Mac)上可用。Windows 解决方案可能略有不同。
- 2 回答
- 0 关注
- 183 浏览
添加回答
举报