日志的5个级别

本文最初发布于aib42个人网站,经原作者授权由InfoQ中文站翻译并分享。

\u0026#xD;\u0026#xD;

日志记录是软件开发的一个概念,几乎所有(可能并不是所有)软件都能从日志记录中获得很多好处。在开始一个大项目时,日志记录通常是我第一个要搭建的子系统。关于它的好处,我可以说出一大堆,但我想把这个机会留给其他人(或者哪一天我想说了再说)。现在,我想说一说日志级别。

\u0026#xD;\u0026#xD;

日志级别是对基本的“滚动文本”式日志记录的一个重要补充。每条日志消息都会基于其重要性或严重程度分配到一个日志级别。例如,“你的电脑着火了”是一个非常重要的消息,而“无法找到配置文件”的重要等级可能就低一些。

\u0026#xD;\u0026#xD;

很多应用程序和库会根据自己或用户的需求定义自己的日志级别(参考文末的“外部例子”了解这方面的内容)。当然,并没有一种约定俗成的方法来做这件事,想怎么做都是可以的,但我想要说说我认为的最重要的五个(或者六个,或者四个)日志级别,它们应该是你自定义日志级别的基础。

\u0026#xD;\u0026#xD;

我还将讨论给这些级别分配的颜色(或者说风格),因为带有不同颜色(或风格)的日志更容易追踪。如果采用了这样的系统,就可以很容易检查你的程序状态,就算没有受过训练的人也可以轻易分辨。谁知道呢,你可能留下电脑跑去吃午饭了,如果出现问题只能找别人来查看日志。

\u0026#xD;\u0026#xD;

Error

\u0026#xD;\u0026#xD;

错误已经发生了,这是毫无疑问的。错误的来源可能是在外部,但不管怎样都需要看一下是怎么回事。

\u0026#xD;\u0026#xD;

可以用这个级别来表示需要引起人们注意(大多数时候需要采取行动)的错误。大多数难以优雅处理的异常都属于Error范畴。

\u0026#xD;\u0026#xD;

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

\u0026#xD;\u0026#xD;

例子

\u0026#xD;\u0026#xD;
  • 无法找到\"crucial.dat\"文件\u0026#xD;\t
  • 错误的处理数据:\u0026lt;Exception\u0026gt;[堆栈追踪或后续的调试消息]\u0026#xD;\t
  • \u0026lt;Exception\u0026gt;在连接数据库时\u0026#xD;

Warn

\u0026#xD;\u0026#xD;

错误有可能已经发生了。我只是一条日志消息,无法分析到底发生了什么,或许需要其他人来看看是不是有问题。

\u0026#xD;\u0026#xD;

这可能是一个平行空间里的错误。它可能是当前或未来潜在问题(比如响应速度慢、连接断开、内存吃紧等等)的预兆,也可能是程序在处理某些任务时出现错误(但可能不一会再发生类似的情况)。

\u0026#xD;\u0026#xD;

风格:能引起人们注意但又不会让人感到厌烦的风格,以免你在解决其他问题时没空来处理这些错误。与Error的风格不同,我使用黄色的文本来表示Warn。

\u0026#xD;\u0026#xD;

例子

\u0026#xD;\u0026#xD;
  • 连接关闭,在2秒后重新连接\u0026#xD;\t
  • 无法找到\"logging.conf\"[在配置文件中指定的],回到默认配置\u0026#xD;\t
  • 30秒后尝试连接超时\u0026#xD;\t
  • 出现FileVersionTooOldException异常,回到Version12Parser\u0026#xD;

Info

\u0026#xD;\u0026#xD;

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

\u0026#xD;\u0026#xD;

Info可以说是(一般的非技术)用户可以接触到的最“啰嗦”的日志级别。如果有人把它们大声念给你听,你也不会介意,这是你最乐于见到的日志记录。它不会包含很多技术细节,可能只包含普通用户会关注的信息(比如文件名等)。

\u0026#xD;\u0026#xD;

风格:可以和背景颜色区分开来,我使用白色文本。

\u0026#xD;\u0026#xD;

例子

\u0026#xD;\u0026#xD;
  • 代理初始化完毕\u0026#xD;\t
  • 加载存档\"yeti02\"\u0026#xD;\t
  • 进入高速模式\u0026#xD;\t
  • 当前目录是\"/tmp\"\u0026#xD;\t
  • 上行线路已建立\u0026#xD;\t
  • 渲染完成,耗时42.999秒\u0026#xD;

Debug

\u0026#xD;\u0026#xD;

如果你能读懂这个级别的日志,那么你离程序已经很近了。

\u0026#xD;\u0026#xD;

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

\u0026#xD;\u0026#xD;

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

\u0026#xD;\u0026#xD;

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

\u0026#xD;\u0026#xD;

例子

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

Trace

\u0026#xD;\u0026#xD;

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

\u0026#xD;\u0026#xD;

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

\u0026#xD;\u0026#xD;

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

\u0026#xD;\u0026#xD;

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

\u0026#xD;\u0026#xD;

例子

\u0026#xD;\u0026#xD;
  • 调用参数(\"baz\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2名名名名名名名名名名名名名名名名名名名

谢谢啊011702

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值