LogBack――LogBack在项目(Web或Java)中的应用(一)

2014-11-24 07:37:26 · 作者: · 浏览: 0

前言

前段时间,将团队框架中的Struts2切换到SpringMVC,做一个系统系统,同时将一些共用组件抽取、独立,团队成员提议使用LogBack记录日志,因之前做的基础组件使用的Log4j,对LogBack不太熟悉,所以自己学习了一下LogBack,学习过程中,发现心仪的中文资料比较少,结合自己开的项目,分享一下LogBack在项目中的应用及自己所遇到的问题。回过头思考使用LogBack的过程,官方文档还是最准确、最完成的学习资源,虽然是英文的,正好此时在翻译一本英文书籍,能静下心去看官方的文档,解决了项目中遇到的一些问题。 项目中使用的LogBack的配置如下: 其文件已经放到GitHub上,地址:https://github.com/wangdongsong/java/blob/master/src/main/java/com/wds/java/base/web/log/logback.xml
  

  

  
	
	
   
	
   
	
	
   
	
    
     
    
     ${LOG_PATH}/log_error.log
     
     
     
      
     
      ${LOG_PATH}/log-error-%d{yyyy-MM-dd}.%i.log
      
      
      
      
       2MB
       
      
     
     
    
     true
     
     
     
     
      %-5p [%d] %C:%L - %m %n
      
     
      utf-8
      
     
     
     
     
      error
      
     
      ACCEPT
      
     
      DENY
      
     
   
	
	
    
    
     ${LOG_PATH}/log_warn.log
     
     
     
      ${LOG_PATH}/log-warn-%d{yyyy-MM-dd}.%i.log
      
      
      
       2MB
       
      
     
    
     true
     
     
     
      %-5p [%d] %C:%L - %m %n
      
     
      utf-8
      
     
     
     
     
      WARN
      
     
      ACCEPT
      
     
      DENY
      
     
   
	
	
    
    
     ${LOG_PATH}/log_info.log
     
     
     
      ${LOG_PATH}/log-info-%d{yyyy-MM-dd}.%i.log
      
      
      
       2MB
       
      
     
    
     true
     
     
     
      %-5p [%d] %C:%L - %m %n
      
     
      utf-8
      
     
     
     
     
      INFO
      
     
      ACCEPT
      
     
      DENY
      
     
   
	
	
	
    
    
     ${LOG_PATH}/log_debug.log
     
     
     
      ${LOG_PATH}/log-debug-%d{yyyy-MM-dd}.%i.log
      
      
      
       2MB
       
      
     
    
     true
     
     
     
      %-5p [%d] %C:%L - %m %n
      
     
      utf-8
      
     
     
     
     
      DEBUG
      
     
      ACCEPT
      
     
      DENY
      
     
   
	
	
    
    
     System.out
     
     
     
      %-5p [%d] %C:%L - %m %n
      
     
      utf-8
      
     
     
     
     
      DEBUG
      
     
   
	
   
	
   
	
   
	
   
	
	
	
   
	
    
     
     
     
     
     
     
   

  


LogBack

LogBack是由log4j的创始人开发的一个日志组件,用于替代log4j。LogBack的架构设计足够通用,可适用于不同的环境,目前LogBack分为三个模:lobback-core,logback-classic和logback-access。

core模块是其它两个模块的基础,classic是core的扩展,是log4j巨大改进的版本。LogBack-classic本身实现了SL4J的API,因此可以很容易的在logback与其它日志系统之间转换,例如log4j、JDK1.4中的java.util.logging(JUL)。第三个模块access,它集成了Servlet容器,提供了通过HTTP访问日志的功能,若了解access可访问其独立文档http://logback.qos.ch/access.html。

LogBack的日志级别有trace、debug、info、warn、error,关于基级别,可参考官方文档(http://logback.qos.ch/manual/architecture.html)。

配置

LogBack可以通过 编程式或以XML、Groovy格式配置,原来使用log4j的用户可以通过属性转换器将log4j.properties转换成logback.xml文件。我在使用这个转换器的时候,能转换成功,但是在Web-App中日志输出的有点小问题,后来就自己写logback.xml文件,LogBack读取配置或属性文件的步骤: LogBack在类路径下尝试查找logback.groovy的文件。如果logback.groovy没有找到,就在类路径下查找logback-test.xml文件。若logback-test.xml文件没有找到,就会在类路径下查找logback.xml文件(自己使用的就是这种方式,将logback.xml配置文件放到类路径下)。如果都找不到,LogBack就会使用BasicConfigurator启动默认配置,该配置会将日志输出到控制上。 第4步,意味着使用缺省配置,它提供了默认(最基础)的日志功能。 如果使用Maven,可以将logback-test.xml的配置文件置于src/test/resources文件夹下,因此,可以在测试时使用logback-test.xml配置,而在产品中使用logback.xml,这一点,我也木用使用到。我的用法是Web-App中,将logback.xml文件放到了src/main/resources路径下,而在Java-App中,将文件放到src/main/java下,如下图:
Web-App的目录结构图: \
Java工程的目录结构图: \

Appender

LogBack的日志Appender都必须实现 ch.qZ http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcy5sb2diYWNrLmNvcmUuQXBwZW5kZXK907/ao6yzo9PDtcTT0ENvbnNvbGVBcHBlbmRlcqGiRmlsZUFwcGVuZGVyus1Sb2xsaW5nRmlsZUFwcGVuZGVyo6zA4M28yOfPwqO6PC9jb2RlPgo8Y29kZT48YnI+CjwvY29kZT4KPGNvZGU+PGltZyBzcmM9"https://www.cppentry.com/upload_files/article/76/1_10phk__.jpg" alt="\">
项目中使用的Appender有两种:ConsoleAppender和RollingFileAppender ConsoleAppender:主要是将日志信息输出到控制上,在上面的日志文件中,stdout的Append就是ConsoleAppender RollingFileAppender:是按日期滚动记录日志,例如RollingFileAppender将日志记录到log.txt文件中,一旦设置的条件满足,就将日志信息记录到另一个文件中,它继承FileAppender。与RollingFileAppender交互的两个重要组件分别是:RollingPolicy和TriggeringPolicy。前者负责滚动神马,后者负责神马时候滚动。 任何时候使用,RollingFileAppender都必须有RollingFileA