我无法让我的程序从main()之外的函数写入日志文件 我确实看到了类似的https://stackoverflow.com/a/19966217/4374801,但没有解决我的确切问题 以下是我正在做的重要事项:
var (
Info *log.Logger
Error *log.Logger
)
func init() {
// set up log file
fileHandle, err := os.OpenFile("/var/log/checkcert", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
log.Fatal(err)
}
//defer to close when you're done with it
defer fileHandle.Close()
//set output of logs to fileHandle
log.SetOutput(fileHandle)
Info = log.New(fileHandle,
"Log: ",
log.Ldate|log.Ltime|log.Lshortfile)
Error = log.New(fileHandle,
"Error: ",
log.Ldate|log.Ltime|log.Lshortfile)
}
// The function below is called from main()
// The version here is truncated to the pertinent bit
func checkDomain(){
Info.Println("test inside checkDomain")
}
上面创建了日志文件,但没有写测试。 如果我在init()中放置一个测试Println,那就行了。
答案 0 :(得分:2)
defer将在函数结束时执行,这意味着在你运行main之前,你的文件将在init函数结束时关闭。您不应该在主要结束之前关闭文件,因此可能考虑将记录器和文件的初始化移动到main的开头而不是init。