日志系统

1.相比system.out.print,日志系统的优势在于分类处理日志信息。使用日志系统,可以将日志信息分级,分类,根据需要只打印一部分信息。

 

2.谈到java日志系统,绕不过Ceki Gülcü,此大神开发了slfj、log4j和logback。

简要来说,slfj是日志系统的抽象,不包含具体操作,log4j和logback是日志系统的具体实现。logback可以说是log4j的增强版。

 

3.slfj全称the simple  logging facade for java。注意facade,没错就是“外观模式”的facade。

大神基于外观模式开发的slfj提供了日志系统的“外观”,或者叫做“抽象”。slfj不包含日志系统的具体实现。

看到这里你可能些疑问,平白无故为什么要加抽象?

代码中使用slfj,则应用在“进行日志操作时”会自动调用classpath中可用的日志系统具体实现来完成日志操作。

上一句有些绕口,简单说就是,当你在应用中使用slfj时,如果应用依赖了log4j,那么slfj会调用log4j打印日志。

如果依赖了logback,那么调用logback来打印日志。

这样做的好处是,便于更灵活地选用具体的日志系统。例如你开发应用时使用log4j来打印日志,代码写了几万行,

leader中途考虑到logback性能更强大,让你换用logback。由于logback和log4j代码不统一,你必须逐行修改代码。

假如使用了slfj,你只需将项目依赖的log4j替换为logback即可,无需修改代码。

4.logback的使用(基于spring boot的项目中使用logback)

  • pom文件中添加slfj的依赖,spring boot的starter中包含了logback,所以使用spring boot时无需添加logback
  • classpath下添加logback-spring.xml文件,编辑该文件,完成相关的配置

5.所谓配置主要是对logger和appender的配置

  • logger:发出打印日志的请求
  • 配置logger时,我们在配置什么?

        name:配置logger时需要配置name,都需要取名,开头说过日志系统可以对日志进行分类。

    取名就是为了分级。一般使用类的全限定名作为logger的名字。

    level:日志等级同时logger有trace debug info warn error等方法,分别发出各级日志请求。logger只有发出高于等于该等级的日志请求才是有效的。

  • appender:日志处理器,可以是console,file以及数据库等等
  • 配置appender时,我们在配置什么?

    配置过程中,我们会对logger指定appender。logger的日志请求会发送到祖先logger的appender。如果logger的additivity设置为false,那么其子孙logger的日志请求只会发送到该logger为止,不会再向上传递。

 

tips: log.info("{}{}",参数1, 参数2),这样比直接拼接字符串:log.info(参数1+参数2)效率更高。因为appender中会使用StringBuilder

posted @ 2016-10-11 10:12  swaggyC  阅读(368)  评论(0)    收藏  举报