(点击
上方公众号
,可快速关注)
来源:Jyy,
www.importnew.com/17315.html
如有好文章投稿,请点击 → 这里了解详情
日志记录是在软件开发过程中常常需要考虑的关键因素。
当产品运行出错时,日志文件通常是我们进行错误分析的首要选择。
而且,在很多情况下,它们是我们手上唯一可以用来查明发生状况和问题根本原因的信息。
可见,正确记录需要的信息是极其重要的。
以下5条日志规则,让我们可以检查和改进在代码中操作日志记录的方式。
同时也请注意,我们既不会讨论怎么配置一个日志引擎,也不会相互比较。
规则1、日志是面向读者的
日志消息不仅要对书写(日志)代码的人有意义,也应该对日志文件的读者有意义。
这似乎是一条很明显但却经常违背的规则。
ERROR: Save failure - SQLException .....
举个例子吧,我们来看看下面这条日志信息:
ERROR: Save failure - SQLException .....
保存什么呢?这条消息在开发者看来是能说明一些问题的,但是对于正在苦苦查看产品问题的可怜家伙来说,却毫无用处。
RROR: Save failure- Entity=Person, Data=[id=123 surname="Mario"] - SQLException....
更合适的信息是这样的:
RROR: Save failure- Entity=Person, Data=[id=123 surname="Mario"] - SQLException....
这就解释了你想要存储的东西(这里是一个 Person,是一个 JPA 实体)以及这个 Person 实例相关的内容。
请注意相关这个单词,并不是指泛泛的全体:我们不应该让无价值的信息使日志文件变得乱糟糟,比如说完整打印所有的实体字段。
通常,实体名字和其逻辑关键字足以识别在表格中的一条记录了。
规则2、匹配日志等级和执行环境
在 Java 系统中提供的所有日志管理工具和引擎都有日志等级(ERROR、INFO……)的概念,这将有可能过滤掉等级过低的消息。
例如,Java util logging 使用如下的等级:SEVERE、WARN、INFO、FINE、FINER、FINEST(+ CONFIG 和 OFF)。相反,两个最受欢迎的日志管理工具, Apache Commons Logging 和 SLFJ 更倾向于如下的等级:FATAL、ERROR、WARN、INFO、DEBUG、TRACE。
日志过滤等级则需要取决于代码的开发阶段:成品与仍处在测试、集成环境下的代码日志等级就不能相同。
更具体的来说,日志等级也应该参考代码的归属情况。
一般而言,我们自己的应用程序代码应该比使用的任何第三方开发库拥有更详细的日志记录。
比如说,Apache 的通用调试消息出现在我们的日志文件中,就没有多大意义。
我通常像这样配置日志记录:
注意:个人而言,我不建议使用 TRACE/FINEST 等级(我并不是唯一持这种观点的人,可以参考 这里 的例子)。