spring mvc logback

最近纔開始在項目中使用logback,有一種相見恨晚的感受,由於它很輕易的知足了個人幾個需求:html

 

        1. 配置簡單,易於上手java

        2. 一個日誌文件中只能某一個級別的日誌app

        3. 一個類中能夠指定多個不一樣的日誌,而且生成的每一個日誌文件中只包含其自己的內容工具

        4. 能夠關閉或者打開某幾個包的日誌,而且能夠設置不一樣的包使用不一樣的日誌級別。spa

 

       1、易用性.net

        logback的易用性不用多講,只須要經過下面兩行就能夠在console中輸出日誌:debug

 

[java] view plaincopyprint?調試

  1. <pre name="code" class="html">Logger debugLogger = LoggerFactory.getLogger(MyClass.class);  
  2. </pre>logger.info("This is a log");  


      程序運行時,logback會查找默認的配置文件logback.xml或者logback-test.xml文件,若是沒有找到它就會使用默認的配置,將日誌打印到console中。下面是一個簡單配置文件(http://logback.qos.ch/manual/configuration.html):日誌

 

[html] view plaincopyprint?code

  1. <configuration>  
  2.   
  3.   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
  4.     <!-- encoders are assigned the type  
  5.          ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->  
  6.     <encoder>  
  7.       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>  
  8.     </encoder>  
  9.   </appender>  
  10.   
  11.   <root level="debug">  
  12.     <appender-ref ref="STDOUT" />  
  13.   </root>  
  14. </configuration>  


       2、日誌級別限制

 

       在多數的Log工具中,級別是能夠傳遞,例如若是指定了日誌輸出級別爲DEBUG,那麼INFO、ERROR級別的log也會出如今日誌文件。這種默認給程序的調試帶來了不少的麻煩。而在logback中能夠經過appender中的filter來嚴格限制日誌的輸出級別:

 

[html] view plaincopyprint?

  1. <filter class="ch.qos.logback.classic.filter.LevelFilter">  
  2.     <level>INFO</level>  
  3.     <onMatch>ACCEPT</onMatch>  
  4.     <onMismatch>DENY</onMismatch>  
  5. </filter>  

上面的設置中只會在文件中出現級別爲INFO的日誌內容。

 

 

     3、同一個類中包含不一樣的日誌

     有時候一個類中可能要求打印不一樣的日誌信息,例若有的用來調試,有的用來記錄程序運行中的某些參數的變化等等。這時候能夠經過下面的語句聲明不一樣的日誌:

 

[java] view plaincopyprint?

  1. Logger debugLogger = LoggerFactory.getLogger(MyClass.class);  
  2. Logger monitorLogger = LoggerFactory.getLogger("monitor");  

    而後在配置文件中分別指定不一樣的輸出文件(debugLogger使用默認的配置):

 

 

[html] view plaincopyprint?

  1.     <appender name="monitor" class="ch.qos.logback.core.rolling.RollingFileAppender">  
  2.         <File>${log.dir}/monitor.log</File>  
  3.         <encoder>  
  4.             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} : %m%n</pattern>  
  5.         </encoder>  
  6.         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
  7.             <level>INFO</level>  
  8.         </filter>  
  9.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
  10.             <fileNamePattern>${log.dir}/sensitive.log.%d{yyyy-MM-dd}</fileNamePattern>  
  11.         </rollingPolicy>  
  12.     </appender>  
  13.         <logger name="monitor" additivity="false" level="INFO">  
  14. <span style="white-space:pre">      </span><appender-ref ref="monitor" />  
  15. <span style="white-space:pre">  </span></logger>  

 這裏經過設置additivity="false"禁止monitor裏的內容向上傳遞,不然會同時顯示在默認的日誌中。

 

 

         4、精確控制日誌的應用範圍

         在程序調試中,常常出現的狀況是:錯誤只在某一個或者幾個類或者包裏,因此只須要打開這幾個類或者包裏的DEBUG級別的log。在之前的項目,使用Spring和Hibernate時,一旦打開DEBUG級別的log,程序自己的debug信息就會被Spring和Hibernate的大量日誌淹沒,大大下降了調試的效率。而logback讓這一切變的簡單起來了:

 

[html] view plaincopyprint?

  1. <logger name="org" level="ERROR" />  

這一行就將org包下面的全部日誌級別設爲了ERROR,不會再打擾咱們的DEBUG

 

 

相關文章
相關標籤/搜索