当前位置:首页 > 天道酬勤 > 正文内容

日志的级别有哪些(日志级别排序)

张世龙2021年12月22日 03:13天道酬勤410

作者| aib42

翻译人员| xsdm,无明

出处高效地开发运输维度

日志级别是如何分类的? 记录是软件开发的概念,大多数(也许不是全部)软件都可以从记录中获益良多。 开始大项目时,日志记录通常是我首先构建的子系统。 关于它的好处,我可以说一大堆,但我想把这个机会留给别人(或者说有一天我想说)。 现在,我想谈谈日志级别。

日志级别是基本的基于“滚动文本”的日志记录的补充。 每个日志消息都根据重要性或严重性分配到日志级别。 例如,“你的电脑着火了”是非常重要的信息,“找不到配置文件”的重要性可能很低。

许多APP和库都根据自己或用户的需要定义自己的日志记录级别。 请参照文章末尾的“外部示例”,理解该领域的内容。 当然,没有做这件事的常用方法。 无论如何,我想说一下我认为的最重要的五个(或六个或四个)日志级别。 那些应该是你自定义日志级别的基础。

还将考虑分配给这些级别的颜色(或样式)。 因为不同颜色(或风格)的日志容易追踪。 如果采用这样的系统的话,可以简单地检查你的程序状态,即使是没有接受过训练的人也可以很容易地识别出来。 谁知道呢,你可能留着电脑跑去吃午饭了。 如果出了问题,只能让别人看看日志。

Error

毫无疑问发生了错误。 错误的来源可能在外部,但需要看看发生了什么。

在这个层面上,它可以表示需要引起人们注意(往往需要采取行动)的错误。 很多难以优雅应对的异常都属于Error范畴。

风格:引起人们注意的东西。 我用红色文本表示。 (我的终端背景是黑色的。

示例:

找不到“crucial.dat”文件错误的处理数据。 exception在连接到数据库时可能发生了

Warn

错误。 我只是日志消息,不能分析发生了什么。 也许需要让别人看看有没有问题。

这可能是平行空间中的错误。 可能是当前或未来潜在问题的征兆,如响应速度慢、连接断开、内存紧张等,也可能是在处理特定任务时程序出错。 但是,这种情况没有可能再次发生。

风格:可以引起人们的注意,但不会使人厌倦的风格,以便在解决其他问题时无暇处理这些错误。 与错误的样式不同,我用黄色文本来表示Warn。

示例:

关闭连接,2秒后重新连接时找不到“logging.conf'[”“由配置式指定”。 返回默认配置,30秒后尝试连接时,将超时,发生FileVersionTooOldException异常,返回到版本12个人信息

通知用户操作或状态发生了变化。 别紧张,继续手头的工作。

Info可以说是(一般的非技术)用户可以访问的最“吵”的日志级别。 我不介意有人大声读。 这是你最喜欢看的日志记录。 技术细节不多,可能只包含dch关注的信息(文件名等)。

样式:可与背景色区分。 我用白色的文本。

示例:

代理初始化完成加载归档“yeti02”进入高速模式的当前目录已建立“/tmp”上行链路,渲染完成。 如果能读取这个等级的话,需要42.999秒

Debug

别的日志,那么你离程序已经很近了。

这就是为什么你需要保存日志文件,在修复 bug 时需要这些日志。这是开发人员最关心的内容。

在转储程序运行流程和其他技术问题时,应该使用 Debug 级别的日志。除非日志太多了(在这种情况下使用 Trace 级别更合适)或者更适合使用更高级别的日志,否则 Debug 日志是非常值得保留的,毕竟是你自己在代码中记录这些日志的。如果和其他的 Debug 或更高级别的消息重叠,而且没有包含更多的信息,那么可以考虑将其删除。

风格:可以很容易就忽略的风格。我使用浅灰色或米黄色文本,也就是我的终端的默认文本颜色。

例子:

从"/etc/octarine/octarine.conf"读取配置使用"/home/aib/.octarinerc"覆盖配置分析完成,创建图…作为”user”连接到服务器:4242发送两条消息渲染时故障:Foo 0.990 秒Bar 42.009 秒

Trace

这些技术细节可能与程序不是很相干,除非你正好需要它们。

Trace 的信息是更加具体的调试信息,你可能并不想看到它(除非你向保存日志的人卖硬盘的时候需要)。它会包含比如说调用了什么函数(函数名),或是和客户端交换了什么网络包等内容。它善于找到一些低级错误,但通常你可以在调试消息中缩小范围,找到问题。

大多数 Trace 消息包含了你已经知道的信息(Debug 消息中说了是“登录”,所以这肯定是登录相关的数据包),所以可能对你不是很有用,除非你的假设是错误的。(”它会不会是登出消息?!“、”这里应该调用 foo。为什么 foo 的 Trace 信息没有打印出来呢?”)

风格:使用比 Debug 消息更加不显眼的风格。我使用深灰色,通常用来表示禁用的颜色。

例子:

调用参数 ("baz", "bar", 42) 函数”foo”->GET / HTTP/1.1\nHost: localhost\n\n收到: <?xml version="1.0" encoding="UTF-8" ?>\n\n [...]

Fatal

发生了一个致命错误,我们要退出了。祝你好运!

它应该比 Error 更严重,但使用它的频率比 Trace 还少,所以我把它放在文章的最后。dddggx,致命错误表示这种情况的发生将导致程序无法继续运行。因此,给它们专门设置一个级别没什么意义。但是致命的错误也可能是常见和可恢复的(比如重启就能解决),因此仍然值得一提。

风格:如果你想不出其他样式的话,可以选择比 Error 更显眼的风格。我使用紫色文本,从远处看的话和 Error 的红色文本相近,但近看就不一样。

例子:

内存不足无法分配 65536 字节的磁盘空间许可过期,切换到免费软件模式

外部例子

任何成熟的日志记录 API 或库都应该有自己的日志级别(可能支持用户自定义)。以下是广泛使用的库,仅供参考:

Linux 的 printk(https://en.wikipedia.org/wiki/Printk#Logging_Levels)Python 的 logging(https://docs.python.org/library/logging.html#logging-levels)Java 的 java.util.logging.Level(https://docs.oracle.com/javase/6/docs/api/java/util/logging/Level.html)或 log4j 的 org.apache.log4j.Level(https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html)JavaScript 的 console.level 调用(WHATWG 或 Node.js 的 Console API 规范)NLog 的日志级别(https://github.com/nlog/nlog/wiki/Log-levels)

英文原文:https://www.aib42.net/article/five-levels-of-logging

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/26766.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。