log4go的异常行为

时间:2013-01-10 07:26:57

标签: logging go

我发现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的消息不会写入输出。

为什么?

4 个答案:

答案 0 :(得分:3)

编辑:看起来他们的入门页面不再是最新的,事实上我在将log4go打印到stdout时遇到了问题,在版本3.0.1的文档中他们说:

  • 使用说明: - ConsoleLogWriter不会向标准输出显示消息源,但FileLogWriter会显示消息源。

这在我的盒子上无法重现。将它打印到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中的某些记录不会被保存。

https://github.com/ccpaging/log4go