码迷,mamicode.com
首页 > 其他好文 > 详细

slf4j使用教程

时间:2016-07-12 23:16:54      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

  日志是任何项目中最重要的东西之一,特别是遇到多线程环境下高压力导致的并发bug时。但是在实际项目中有使用slf4j-api、slf4j-log4j12还有log4j的,作为程序员到底应该使用哪一种呢?要使用他们,我们首先要理清楚他们之间的关系。

1、slf4j-api、slf4j-log4j12、log4j之间的关系

技术分享

  ①首先系统包含slf4j-api作为日志接入的接口。compile时slf4j-api中public final class LoggerFactor类中private final static void bind()方法会寻找具体的日志实现类绑定,主要通过StaticLoggerBinder.getSingleton()的语句调用。
  ②slf4j-log4j12是链接slf4j-api和log4j中间的适配器。它实现了slf4j-apiz中StaticLoggerBinder接口,从而使得在编译时绑定的是slf4j-log4j12的getSingleton()方法。
  ③log4j是具体的日志系统。通过slf4j-log4j12初始化Log4j,达到最终日志的输出。

2、什么样的日志需要记录

  每次你要加一行日志的时候,你都会想,这里该用哪种日志级别?大概有90%的程序员都不太注意这个问题,都是用一个级别来记录日志,通常不是INFO就是DEBUG。为什么?日志框架和System.out相比有两大优势:分类和级别。

  两者可以让你可以选择性的过滤日志,永久的或者只是在排查错误的时候。

  • ERROR 发生了严重的错误,必须马上处理。这种级别的错误是任何系统都无法容忍的。比如:空指针异常,数据库不可用,关键路径的用例无法继续执行。
  • WARN 还会继续执行后面的流程,但应该引起重视。其实在这里我希望有两种级别:一个是存在解决方案的明显的问题(比如,"当前数据不可用,使用缓存数据"),另一个是潜在的问题和建议(比如“程序运行在开发模式下”或者“管理控制台的密码不够安全”)。应用程序可以容忍这些信息,不过它们应该被检查及修复。
  • DEBUG 开发人员关注的事。后面我会讲到什么样的东西应该记录到这个级别。
  • TRACE 更为详尽的信息,只是开发阶段使用。在产品上线之后的一小段时间内你可能还需要关注下这些信息,不过这些日志记录只是临时性的,最终应该关掉。DEBUG和TRACE的区别很难区分,不过如果你加了一行日志,在开发测试完后又删了它的话,这条日志就应该是TRACE级别的。

  上面的列表只是一个建议,你可以根据自己的规则来记录日志,但最好要有一定的规则。我个人的经验是:在代码层面不要进行日志过滤,而是用正确的日志级别能够快速的过滤出想要的信息,这样能节省你很多时间。最后要说的就是这个臭名昭著的is*Enabled的条件语句了。有的人喜欢把每次日志前加上这个:

if(log.isDebugEnabled())
    log.debug("Place for your commercial");

个人认为,应该避免在代码里加入这个乱哄哄的东西。性能看起来没有什么提升(尤其是用了slf4j之后),更像是过早的优化。还有,没发现这么做有点多余么?很少有时候是明确需要这种显式的判断语句的,除非我们证明构造日志消息本身开销太大。

3、如何使用

  未完待续。。。。。。。

slf4j使用教程

标签:

原文地址:http://www.cnblogs.com/daxiang2008/p/5665020.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!