我正在努力寻找如何分离来自不同包的日志。
示例:
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.log
和 my-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/