我发现log4go包不时丢失日志。
以下是一个简单的代码段(我移动了log4go
目录,因此以下导入正常。):
package main
import (
"log4go"
"log"
"fmt"
)
func main() {
fmt.Println("fmt")
log.Println("log")
log4go.Info("log4go")
log4go.Info("log4go")
}
然后我按go run test.go
执行,输出如下:
fmt
2013/01/10 15:24:04 log
log4go
的消息不会写入输出。
为什么?
答案 0 :(得分:3)
编辑:看起来他们的入门页面不再是最新的,事实上我在将log4go打印到stdout时遇到了问题,在版本3.0.1的文档中他们说:
这在我的盒子上无法重现。将它打印到stdout的唯一方法是在记录调用后通过调用os.Stdout.Sync()手动刷新(如@jnml建议的那样)。
一般来说,我的印象是log4go的文档最近没有维护,示例不起作用,他们使用弃用的方法,因此一般行为很难理解。
答案 1 :(得分:2)
检查log4go
网站上的问题后,似乎log4go
出现了刷新问题。
因为它使用channel
来写入文件,如果main
退出太快,则不会写入日志内容。
因此,在代码片段的末尾添加time.Sleep(time.Second)
将导致日志内容刷新。
答案 2 :(得分:1)
如果没有提供至少一个“log4go”的链接,那么回答这个问题并不容易(因此为-1)所以让我猜一下:某个地方可能缺少“刷新”的调用。也许最好向包裹作者报告问题?
BTW:考虑到标准/推荐的Go设置,导入路径“log4go”也被破坏了。
答案 3 :(得分:0)
简单地将一些代码添加到Close(),如下所示。
for i := 10; i > 0 && len(w.rec) > 0; i-- {
time.Sleep(100 * time.Millisecond)
}
w.rec中的某些记录不会被保存。