2

我发现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

4 回答 4

3

编辑:似乎他们的入门页面不再是最新的,事实上我在让 log4go 打印到标准输出时遇到了问题,在 3.0.1 版的文档中他们指出:

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

这在我的盒子上无法重现。将其打印到标准输出的唯一方法是在记录调用后通过调用 os.Stdout.Sync() 手动刷新(如@jnml 建议的那样)。

一般来说,我的印象是 log4go 的文档最近没有维护,示例不起作用,它们使用不推荐使用的方法,因此一般行为难以理解。

于 2013-01-10T11:49:57.580 回答
2

检查log4go网站上的问题后,似乎log4go有冲洗问题。

因为它使用achannel写入文件,如果main退出太快,日志内容将不会被写入。

因此time.Sleep(time.Second),在代码片段末尾添加 a 会导致日志内容刷新。

于 2013-01-12T00:08:15.590 回答
1

甚至没有提供至少一个“log4go”的链接,回答这个问题并不容易(因此-1)所以让我猜猜:在某处可能缺少对“flush”的调用。也许更好地将问题报告给包作者?

顺便说一句:考虑到标准/推荐的 Go 设置,导入路径“log4go”也被破坏了。

于 2013-01-10T07:32:32.990 回答
0

像下面这样简单地向 Close() 添加一些代码。

for i := 10; i > 0 && len(w.rec) > 0; i-- {
    time.Sleep(100 * time.Millisecond)
}

w.rec 中的一些记录无法保存。

https://github.com/ccpaging/log4go

于 2015-01-06T13:16:35.503 回答