Logback-spring.xml配置文件
1、日志級別:日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,例如:如果設置為WARN,則低於WARN的信息都不會輸出
2、根節點:configuration
configuration 有三個可選屬性:
a、scan屬性:用來設置配置文件變動時是否重新加載,值是true\false,默認是true即配置變動時重新加載
b、scanperiod屬性:用來設置每隔多久檢查一次配置是否變動,默認是1分鍾,默認單位是毫秒
c、debug屬性:用來設置是否將logback內部的日志打印出來,即啟動時輸出配置加載信息。值為true\false 默認為false
3、property節點:
設置要使用的或者共用的變量,property包含兩個屬性name和value;其中name的值是變量的名稱,value的值是變量所代表的值。
<property>定義的值可以使用“${變量名}”到logger上下文中。
4、springProperty節點
該標簽的工作方式類似於Logback的標准<property>標簽。但是,value您無需指定direct,而是指定source屬性的(來自Environment)。
如果需要將屬性存儲在local范圍之外的其他位置,則可以使用該scope屬性。
如果需要后備值(如果未在中設置屬性Environment),則可以使用defaultValue屬性。
5.appender節點
appender節點可以有多個,分別針對不同的包或者類做不同的輸出,
如果appender輸出到文件時,可以設置append子節點值true/false,是末尾追加日志還是替換日志,值為true時表示追加。
可以在appender中使用filter節點(過濾器),在此節點內過濾日志級別(使用level節點指定),過濾后會返回一個枚舉值,
即DENY,NEUTRAL,ACCEPT其中之一:
A、返回DENY,日志將立即被拋棄不再經過其他過濾器;
B、返回NEUTRAL,有序列表里的下個過濾器接着處理日志;
C、返回ACCEPT,日志會被立即處理,不再經過剩余過濾器
如果需要使用這些值做處理時,需要使用onMatch(level級別或大於level級別的)和onMismatch(級別小於level級別的)
6、logger節點
用來設置某一個包或者具體的某一個類的日志打印級別、以及指定appender。logger僅有一個name屬性和兩個可選的level、addtivity屬性。
Name屬性:用來指定受此logger約束的某一個包或者具體的某一個類。
Level屬性:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR
如果未設置此屬性,那么當前logger將會繼承上級的級別。
Addtivity屬性:用來設置是否向上級logger傳遞打印信息。默認是true。
logger可以包含零個或多個appender-ref元素,標識這個appender將會添加到這個logger
7、root節點
也是<logger>元素,但是它是根logger。只有一個level屬性,因為已經被命名為"root".
level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR。默認是DEBUG。
root可以包含零個或多個appender-ref元素,標識這個appender將會添加到這個logger
8、pattern節點定義的輸出模式解釋
%d{HH:mm:ss.SSS} 當前時間;
[%thread] [當前線程名稱]
%-5level logger級別
%logger{36} logger名稱
-%msg%n 定義的輸出
%line 輸出日志的行號
%n 換行
%date和%d{yyyy-MM-dd HH:mm:ss.SSS} 當前時間包含年月日
{%C.java:%L} 輸出日志所在的java類、所在行及路徑可以替換[%thread]
9、appender下的filter的常見種類
在logback中,過濾器可以添加到Appender上。通過添加一個或多個過濾器到Appender,你可以通過任意條件,
比如:日志內容、MDC內容、時間等等日志的任何部分,過濾日志事件。
級別過濾器
級別過濾器(LevelFilter)是基於准確匹配日志級別。如果日志級別等於配置的級別,過濾器通過配置中的OnMatch與OnMismatch屬性決定是接受還是拒絕事件。
閥值過濾器
閥值過濾器(ThresholdFilter)過濾低於指定閥值的事件。當事件中的日志級別大於等於指定閥值時,過濾器的decide方法返回NEUTRAL。然而,拒絕日志級別小於閥值的事件。
條件過濾器
條件過濾器(EvaluatorFilter)是一種封裝了EventEvaluator的通過過濾器。像名字代表的,條件過濾器是根據判斷事件是否符合指定條件來分別返回OnMatch與OnMismatch屬性里的值。
注意:EventEvaluator是一個抽象類,通過繼承它,你可以實現你自己的條件邏輯。
附上配置文件模板:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="false"> <property name="LOG_ROOT" value="你的日志的根路徑"></property> <property name="LOG_PATH" value="日志路徑"/> <springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue="你的項目名"/> <property name="log.path" value="${LOG_ROOT}/${LOG_PATH}/${spring.application.name}"/> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{MM-dd HH:mm:ss.SSS} %-5level [%logger{50}] - %msg%n</pattern> </encoder> </appender> <!-- Log file error output --> <!-- 每天生成日志文件,文件大小超過20則新生成一個文件, 同時將舊文件按${LOG_HOME}/logs/error.%d{yyyy-MM-dd}.%i.log格式保存,文件保存30天 --> <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在記錄的日志文檔的路徑及文檔名 --> <file>${log.path}/info.log</file><!-- 日志名稱 --> <!-- 日志記錄器的滾動策略,按日期,按大小記錄 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 每天日志歸檔路徑以及格式 --> <fileNamePattern>${log.path}/%d{yyyy-MM}/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 日志文件過大會使的編輯器打開非常慢,因此設置日志最大20MB --> <maxFileSize>20MB</maxFileSize> <!--日志文檔保留天數--> <maxHistory>30</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> <!-- <totalSizeCap>10GB</totalSizeCap> <!– 總日志大小 –>--> </rollingPolicy> <!-- encoder負責兩件事,日志文檔輸出格式,一是把日志信息轉換成字節數組,二是把字節數組寫入到輸出流 --> <encoder> <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern> </encoder> <!-- 過濾器,可以過濾掉不符合條件的日志,INFO及以上的日志被處理,其它的拒絕 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> </appender> <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/debug.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.path}/%d{yyyy-MM}/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>20MB</maxFileSize> <maxHistory>30</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> <encoder> <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>debug</level> </filter> </appender> <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>20MB</maxFileSize> <maxHistory>30</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> <encoder> <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>error</level> </filter> </appender> <logger name="org.springframework" level="INFO"/> <logger name="org.springframework.web" level="INFO"/> <logger name="org.springframework.beans" level="INFO"/> <logger name="org.apache" level="WARN"/> <logger name="org.springboot.sample" level="INFO"/> <logger name="javax.activation" level="WARN"/> <logger name="org.mybatis.spring" level="INFO"/> <!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 --> <root level="INFO"> <appender-ref ref="console"/> <appender-ref ref="debug"/> <appender-ref ref="error"/> <appender-ref ref="info"/> </root> </configuration>