Logging 如何在golang中实现基于级别的日志记录?
在golang中是否有用于基于级别的日志记录的好包装器? 如果没有,我应该如何着手实施一个呢 我想要的很简单。我想要一些功能,例如Logging 如何在golang中实现基于级别的日志记录?,logging,go,Logging,Go,在golang中是否有用于基于级别的日志记录的好包装器? 如果没有,我应该如何着手实施一个呢 我想要的很简单。我想要一些功能,例如 log.Error() log.Info() etc,将其输出显示到stdout,并将其保存在日志文件中(基于作为命令行参数提供给程序的级别)。 如何实现此包装器?请查看并查看“applog”包。它是这样工作的 PS:整个CGL目前正在重新设计,不久将推出新功能,但名称不同。;) 我认为这很适合你,而且它似乎很受欢迎,因为它经常出现在日志讨论中。我从未认真使用过它
log.Error()
log.Info()
etc,将其输出显示到stdout,并将其保存在日志文件中(基于作为命令行参数提供给程序的级别)。
如何实现此包装器?请查看并查看“applog”包。它是这样工作的
PS:整个CGL目前正在重新设计,不久将推出新功能,但名称不同。;) 我认为这很适合你,而且它似乎很受欢迎,因为它经常出现在日志讨论中。我从未认真使用过它,因此除此之外我无法发表评论。完全符合您的要求:
log := stdlog.GetFromFlags()
log.Info("Connecting to the server...")
log.Errorf("Connection failed: %q", err)
鉴于现有答案已经过时,还有一些建议:
- -这里比另一个小
- -用于许多流行项目,如Docker
- -谷歌,在GO 中实现C++ GOLG库
- 重点关注“结构化日志记录”,它更适合工具使用
- -“燃烧得很快”
- :快速、结构化、分级登录Go
- :结构化、可插拔的Go日志记录。(JSON和文本格式)
log.error()
)时,您可以向某些监视工具等报告。我发现这非常容易使用,您甚至不需要更改std库对log.Printf
的方法调用 我目前正在与他们合作,并且喜欢他们的方法。代码看起来很好,很简单,并且有足够的文档记录
让我信服的是:
- 没有外部依赖关系
- 我可以在任何地方使用
,而无需传递引用rlog.Info()
- 良好使用环境变量
- 任意数量的跟踪级别,例如
rlog.trace(4,“foo”)
除了添加对信息、警告和调试的支持外,用户还可以定义自己的任意日志记录级别。日志记录级别分别启用和禁用。这意味着您可以打开调试日志,而无需获取其他所有内容 您可以使用模块midlog实现任何其他日志库,
这是一篇不错的文章,基本上就是这么说的。我觉得这可能太固执己见,但是阅读不同的观点也是值得的。 < P>你可以考虑的一个日志模块是KLoG。它支持“V”日志记录,这为在特定级别进行日志记录提供了灵活性 klog是glog的一个分支,它克服了以下缺点 glog提出了很多“陷阱”,并在集装箱化环境中引入了挑战,所有这些都没有很好的文档记录。 glog没有提供一种简单的方法来测试日志,这会降低使用它的软件的稳定性 GOLG是C++的基础,KLogo是纯Gangon实现< /P> 示例实现
package main
import (
"flag"
"k8s.io/klog"
)
type myError struct {
str string
}
func (e myError) Error() string {
return e.str
}
func main() {
klog.InitFlags(nil)
flag.Set("v", "1")
flag.Parse()
klog.Info("hello", "val1", 1, "val2", map[string]int{"k": 1})
klog.V(3).Info("nice to meet you")
klog.Error(nil, "uh oh", "trouble", true, "reasons", []float64{0.1, 0.11, 3.14})
klog.Error(myError{"an error occurred"}, "goodbye", "code", -1)
klog.Flush()
}
@elithrar,谢谢,它很简单而且功能强大,可能比你需要的要多,但值得一看。该实现非常有趣地使用了布尔类型和方法。似乎seelog必须为每个语句获取/释放全局锁。不幸的是,链接已失效所有链接均已失效或与日志无关。很抱歉,随着时间的推移,出现了所有移动。需要一些时间才能找到目前最好的一个。软件包位于,文档位于。此外,二进制日志和nanolog不符合“将其输出显示到标准输出”的要求。Binlog没有GitHub星星。欢迎链接到解决方案,但请确保您的答案在没有它的情况下是有用的:这样您的其他用户就会知道它是什么以及为什么存在,然后引用您链接到的页面的最相关部分,以防目标页面不可用。logrus的一个缺点是它没有日志旋转,需要使用一些外部程序来实现这一点。。。