Logback 基礎知識

1.Logback使用
logback 是log4j的替代者,其須要slf4j。
其配置文件主要有如下三種
1. logback.groovy
2. logback-test.xml
3. logback.xml
在加載配置文件的過程彙總,會按照1.2.3的順序去加載,首先找的groovy文件。
因此若是啓動的時候打印了info日誌會看到:css

11:06:45,631 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
11:06:45,631 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
11:06:45,631 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/D:/ideaspace/untitled/ran-frontend/target/classes/logback.xml]

  


能夠看出來,首先去classpath下找前兩個文件,若是找不到的化,再去找第三個。
其使用沒有什麼區別:java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;

public class HelloWorld2 {

  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
    logger.debug("Hello world.");

    // print internal state, 咱們能夠監控到其內部的狀態
    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
    StatusPrinter.print(lc);
  }
}

  

日誌的自動加載
<!-- 表示的啓動自動掃描, 其中時間單位默認是milliseconds ,默認時間是60秒-->
<configuration scan="true" scanPeriod="30 seconds" >
...
</configuration>
若是scan配置的是true,則會啓用ReconfigureOnChangeFilter,此Filter會在任何調用日誌記錄(任何級別)的時候都會被執行。
因爲每次都被執行,所以這個會有比較嚴重的性能問題,
In order to improve performance, ReconfigureOnChangeFilter is in reality "alive" only once every N logging operations.
Depending on how often your application logs, the value of N can be modified on the fly by logback.
By default N is 16, although it can go as high as 2^16 (= 65536) for CPU-intensive applications.
所以若是配置文件修改了,須要生效的話,必要要達到指定的調用次數並且達到從新加載的時間纔會生效。
其中這個次數默認是16次,最高能夠配置到2^16次。app


logback.xml配置:
1. 簡單文件配置frontend

<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>D:\deploy\logs\ranger.log</file>
<append>true</append>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>

 

2. 簡單的控制檯配置;ide

<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>

<root level="INFO">
<appender-ref ref="stdout" />
</root>
</configuration>

 

3. 滾動日誌配置:性能

<configuration scan="true" scanPeriod="30 seconds">
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:\deploy\logs\ranger.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>ranger.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>
<root level="INFO">
<appender-ref ref="file" />
</root>
</configuration>

 


4. 控制檯和文件同時記錄idea

<configuration scan="true" scanPeriod="30 seconds">
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:\deploy\logs\ranger.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>ranger.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>
<root level="INFO">
<appender-ref ref="file" />
<appender-ref ref="stdout" />
</root>
</configuration>

 


5. 爲某個類或者包單獨設置日誌級別spa

<configuration scan="true" scanPeriod="30 seconds">
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:\deploy\logs\ranger.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>ranger.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>
<!-- 默認日誌級別是Error -->
<root level="ERROR">
<appender-ref ref="file" />
<appender-ref ref="stdout" />
</root>
<!-- 單獨的日誌級別設置 HibernateLogInterceptor的日誌級別是DEBUG-->
<logger name="com.ranger.utils.orm.HibernateLogInterceptor" additivity="false">
<level value="DEBUG" />
<appender-ref ref="file" />
</logger>
</configuration>
相關文章
相關標籤/搜索