时间:2022-12-15 08:40:01
作者| aib42译者|刘嘉洋,无明出处丨高效开发运维
日志级别是如何分类的? 日志记录是一个软件开发概念,大多数(可能不是全部)软件都可以从日志记录中获益良多。 当我开始一个大项目时,日志记录通常是我首先构建的子系统。 关于它的好处,我可以说一大堆,但我想把这个机会留给别人(或者有一天我想谈谈) 现在,我想谈谈日志级别。 日志级别是基本“滚动文本”日志记录的重要补充。 每个日志消息都根据重要性或严重性分配给日志级别。 例如,“你的电脑着火了”是非常重要的消息,“找不到配置文件”可能不太重要。 许多APP应用程序和库根据自己或用户的需求定义自己的日志级别。 请参照文末的“外部示例”理解该领域的内容。 当然,没有做这件事的一般方法。 怎么做都行,但我想说一下我认为最重要的五个(或者六个,或者四个)日志级别。 它们应该是你自定义日志级别的基础。 还将考虑分配给这些级别的颜色(或样式)。 因为不同颜色(或样式)的日志很容易跟踪。 如果采用这样的系统,就可以很容易地检查你的程序的状态,没有受过训练的人也能很容易地分辨出来。 谁知道呢,你可能留下电脑去吃午饭了。 如果发生了问题,只能让别人看日志。
毫无疑问发生了错误。 错误的发生源可能在外部,但需要看看发生了什么。 在这个水平上,可以表示需要引起人们注意(往往需要采取行动)的错误。 许多难以优雅处理的异常属于Error范畴。 风格:引起人们注意的东西。 我用红色的文本表示。 (我的终端背景是黑色的。 例如:

找不到“crucial.dat”文件错误的处理数据。 连接到[堆栈跟踪或后续调试消息]数据库时,连接到数据库时可能发生了Warn错误。 我只是日志消息,不能分析发生了什么。 你可能需要让别人看看是不是有问题。 这可能是平行空间中的错误。 可能是当前或未来潜在问题的征兆,如响应速度慢、连接断开、内存紧张,也可能是处理特定任务时程序出现错误。 但是,这种情况不可能再次发生。 样式:一种能引起人们注意但不会厌倦的样式,以便在解决其他问题时无暇处理这些错误。 与Error的样式不同,我用黄色文本来表示Warn。 例如:
关闭连接,两秒钟后重新连接时找不到' logging.conf'[由配置文件指定]。 恢复默认配置并在30秒后尝试连接时超时,将发生FileVersionTooOldException异常,然后返回Version12Parser Info以通知用户操作或状态已改变。 别紧张,继续手头的工作。 Info可以说是(典型的非技术)用户可以访问的最“吵”的日志级别。 我不介意有人大声读给你听。 这是你最乐意看的日志记录。 它不包含太多技术细节,可能只包含公众关注的信息,如文件名。 样式:可以与背景色区分开来。 我用白色的文本。 例如:
代理初始化完成进入加载归档“yeti02”快速模式当前目录已建立“/tmp”上行,呈现完毕。 需要42.999秒。Debug如果你能读这一级别的日志,你就接近程序了。 所以需要保存日志文件,修复错误时需要。 这是开发者最关心的内容。 当转储程序执行进程和其他技术问题时,必须使用调试级别的日志。 除非日志太多(在这种情况下使用Trace级别更合适),或者不适合使用更高级别的日志,否则调试日志非常值得保留。 只是你自己在代码中记录这些日志。 如果与其他调试或更多消息重叠且不包含更多信息,请考虑将其删除。 样式:可以轻易忽略的样式。 我使用浅灰色或米色的文本,也就是我的终端的默认文本颜色。 例如:
从“/etc/octarine/octarine.conf”读取配置,在“/home/aib/.octarinerc”中覆盖配置,完成分析,然后作为“绘制图用户”连接到服务器。 在4242上发送和呈现两条消息的障碍: foo0.999992 Trace中的信息是更具体的调试信息,除非将硬盘卖给保存日志的人时需要,否则您可能不希望看到。 这包括例如调用了什么函数(函数名),或者客户端交换了什么样的网络包等。 虽然善于发现低级错误,但通常可以通过调试消息缩小范围来发现问题。 因为大多数Trace消息都包含已经知道的信息(在调试消息中说“登录”,所以这一定是与登录相关的数据包),除非假设有误,否则对你来说不太有用“不会是注销消息吧? 呃! “,”在这里应该调用foo。 为什么不打印foo的Trace信息呢? )样式:使用比Debug消息不明显的样式。 我用深灰色。 通常表示无效的颜色。 例如:
参数“' baz ',' bar ',42”函数“foo”- get/http/1.1n host:localhostnn接收: XML version=' 1.0 ' encodincoding 应该比Error更严重,但使用频率比Trace少,所以放在文章的最后。 顾名思义,致命错误表示如果出现这种情况,程序将无法执行。 因此,对这些特别设定等级没有什么意义。 但是,致命错误是常见的,也可能是可恢复的,因此很有价值,例如重新启动就可以解决。 样式:如果想不到其他样式,可以选择比Error更显眼的样式。 我用紫色的文本。 从远处看和Error的红色文本很接近,但从近处看不一样。 例如:
内存不足,无法分配65536字节的磁盘空间许可证将过期。 切换到自由软件模式外部实例的成熟日志记录API或库需要有自己的日志级别。 可能支持用户自定义。 以下是广泛使用的库。 作为参考:
Linux上的printk ( 3359 en.Wikipedia.org/wiki/printk # logging _ levels ) Python的logging ) https://docs.python.org/libhon logging-levels(Java的Java.util.logging.level ) https://docs.Oracle.com/Java se/6/docs/API/Java/util Logel Level.html (或log4j的org.Apache.log4j.level ) https://logging.Apache.org/log4j/1.2/API docs/org/Apache log44 Level.html )对JavaScript的console.level调用( WHATWG或Node.js的Console API规范) NLog的日志级别) https://github.com/nlog /