专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
芋道源码  ·  面试官:String 能存储多少个字符? ·  15 小时前  
Java编程精选  ·  别踩坑!存储电话号码,到底用 int ... ·  昨天  
Java编程精选  ·  不准加班!美的强制18点20下班;大疆强制员 ... ·  3 天前  
芋道源码  ·  确保数据安全!使用Spring Boot ... ·  2 天前  
芋道源码  ·  Guava的这些骚操作,让我的代码量减少了50% ·  2 天前  
51好读  ›  专栏  ›  ImportNew

Java 日志记录的 5 条规则

ImportNew  · 公众号  · Java  · 2017-02-24 11:32

正文

(点击 上方公众号 ,可快速关注)


来源: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 的通用调试消息出现在我们的日志文件中,就没有多大意义。


我通常像这样配置日志记录:


  • 成品阶段: 我的代码是 INFO 等级,第三方库是 WARN。


  • 测试、集成阶段:我的代码是 DEBUG 等级,第三方库是 WARN(或者如果需要的话是 INFO)。


  • 开发阶段:任何有意义的信息。


注意:个人而言,我不建议使用 TRACE/FINEST 等级(我并不是唯一持这种观点的人,可以参考 这里 的例子)。







请到「今天看啥」查看全文