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

标签 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 包的解决方案 - 即我不能以任何我想要的方式更改这些库中的日志记录机制,因此我认为自定义日志记录库不在游戏范围内。

最佳答案

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

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,因此您可以打开任何文件并直接写入。

关于logging - 如何从不同的包中分离日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32566740/

相关文章:

linux - 未创建 systemd 用户日志

c# - 企业库日志记录 - 如何在运行时获取配置的日志记录级别?

java - Log4j2 JSONLayout 时间戳模式

windows - 如何使用 golang 在 Windows 上获取正确的文件基名

go - io.copy在goroutine中以防止阻塞

go - 如何从github获取AWS软件包

go - 在go中用UTF-8格式编码字符串

Azure 函数详细跟踪日志记录到 Application Insights

java - 没有 jcl-over-slf4j 的 Spring + Logback(slf4j) 日志记录

go - Golang 中的 echo 命令