如何从不同的包中分离日志

时间:2015-09-14 13:59:13

标签: logging go

我正在努力寻找如何分离来自不同包裹的日志。

示例:

package main

import (
    "log"
    "github.com/org/verbose"
)

func main() {
    log.Print("Hello World")
    verbose.DoSomething() // Which will generate a lot log messages
}

我知道我可以启用标记log.Llongfile,然后日志中的每一行都将包含文件的完整路径,其中包含来自的日志消息。然而,这仍然意味着我需要进行一些后期处理,以便从该单个文件中过滤掉我不想要的以及我想要的内容。

我希望已经实时进行过滤,因此我最终得到verbose-lib.logmy-app.log或类似内容。

我正在寻找一种适用于大多数现有OSS软件包的解决方案 - 即我不能以任何我想要的方式更改这些库中的日志记录机制,因此我认为自定义日志记录库不在游戏中。 / p>

1 个答案:

答案 0 :(得分:2)

如果软件包向您公开其记录器,您可以为其创建一个带有前缀的新记录器:

package main

import (
    "log"
    "os"

    "example.com/lib/foo"
)

func main() {
    foo.Logger := log.New(os.Stderr, "libfoo: ", log.LstdFlags)
    // Do stuff.
}

这样,foo的邮件将如下所示:

libfoo: 2015/09/14 17:04:52 Something's happened!

此外,log.New接受io.Writer,因此您可以打开任何文件并将其直接写入。