static Level DEBUG
DEBUG Level指出細粒度信息事件對調試應用程序是非常有幫助的。
static Level INFO
INFO level表明 消息在粗粒度級別上突出強調應用程序的運行過(guò)程。
static Level WARN
WARN level表明會(huì )出現潛在錯誤的情形。
static Level ERROR
ERROR level指出雖然發(fā)生錯誤事件,但仍然不影響系統的繼續運行。
static Level FATAL
FATAL level指出每個(gè)嚴重的錯誤事件將會(huì )導致應用程序的退出。
另外,還有兩個(gè)可用的特別的日志記錄級別: (以下描述來(lái)自log4j API http://jakarta.apache.org/log4j/docs/api/index.html):
static Level ALL
ALL Level是最低等級的,用于打開(kāi)所有日志記錄。
static Level OFF
OFF Level是最高等級的,用于關(guān)閉所有日志記錄。
,優(yōu)先級從高到低分別是 ERROR、WARN、INFO、DEBUG。通過(guò)在這里定義的級別,您可以控制到應用程序中相應級別的日志信息的開(kāi)關(guān)。比如在這里定義了INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來(lái)。程序會(huì )打印高于或等于所設置級別的日志,設置的日志等級越高,打印出來(lái)的日志就越少。如果設置級別為INFO,則優(yōu)先級高于等于INFO級別(如:INFO、 WARN、ERROR)的日志信息將可以被輸出,小于該級別的如DEBUG將不會(huì )被輸出。
logback基本配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_HOME" value="c:/log" />
<!-- 控制臺輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<Encoding>UTF-8</Encoding>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<Encoding>UTF-8</Encoding>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/myApp.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
<filter>:
過(guò)濾器,執行一個(gè)過(guò)濾器會(huì )有返回個(gè)枚舉值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志將立即被拋棄不再經(jīng)過(guò)其他過(guò)濾器;返回NEUTRAL,有序列表里的下個(gè)過(guò)濾器過(guò)接著(zhù)處理日志;返回ACCEPT,日志會(huì )被立即處理,不再經(jīng)過(guò)剩余過(guò)濾器。
過(guò)濾器被添加到<Appender> 中,為<Appender> 添加一個(gè)或多個(gè)過(guò)濾器后,可以用任意條件對日志進(jìn)行過(guò)濾。<Appender> 有多個(gè)過(guò)濾器時(shí),按照配置順序執行。
下面是幾個(gè)常用的過(guò)濾器:
LevelFilter: 級別過(guò)濾器,根據日志級別進(jìn)行過(guò)濾。如果日志級別等于配置級別,過(guò)濾器會(huì )根據onMath 和 onMismatch接收或拒絕日志。有以下子節點(diǎn):
<level>:設置過(guò)濾級別
<onMatch>:用于配置符合過(guò)濾條件的操作
<onMismatch>:用于配置不符合過(guò)濾條件的操作
例如:將過(guò)濾器的日志級別配置為INFO,所有INFO級別的日志交給appender處理,非INFO級別的日志,被過(guò)濾掉。
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger{30} - %msg%n
</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
ThresholdFilter: 臨界值過(guò)濾器,過(guò)濾掉低于指定臨界值的日志。當日志級別等于或高于臨界值時(shí),過(guò)濾器返回NEUTRAL;當日志級別低于臨界值時(shí),日志會(huì )被拒絕。
例如:過(guò)濾掉所有低于INFO級別的日志。
<configuration>
<appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
<!-- 過(guò)濾掉 TRACE 和 DEBUG 級別的日志-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger{30} - %msg%n
</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
EvaluatorFilter: 求值過(guò)濾器,評估、鑒別日志是否符合指定條件。有一下子節點(diǎn):
<evaluator>:
鑒別器,常用的鑒別器是JaninoEventEvaluato,也是默認的鑒別器,它以任意的java布爾值表達式作為求值條件,求值條件在配置文件解釋過(guò)成功被動(dòng)態(tài)編譯,布爾值表達式返回true就表示符合過(guò)濾條件。evaluator有個(gè)子標簽<expression>,用于配置求值條件。
求值表達式作用于當前日志,logback向求值表達式暴露日志的各種字段:
| Name | Type | Description |
|---|---|---|
| event | LoggingEvent | 與記錄請求相關(guān)聯(lián)的原始記錄事件,下面所有變量都來(lái)自event,例如,event.getMessage()返回下面"message"相同的字符串 |
| message | String | 日志的原始消息,例如,設有logger mylogger,"name"的值是"AUB",對于 mylogger.info("Hello {}",name); "Hello {}"就是原始消息。 |
| formatedMessage | String | 日志被各式話(huà)的消息,例如,設有logger mylogger,"name"的值是"AUB",對于 mylogger.info("Hello {}",name); "Hello Aub"就是格式化后的消息。 |
| logger | String | logger 名。 |
| loggerContext | 日志所屬的logger上下文。 | |
| level | int | 級別對應的整數值,所以 level > INFO 是正確的表達式。 |
| timeStamp | long | 創(chuàng )建日志的時(shí)間戳。 |
| marker | Marker | 與日志請求相關(guān)聯(lián)的Marker對象,注意“Marker”有可能為null,所以你要確保它不能是null。 |
| mdc | Map | 包含創(chuàng )建日志期間的MDC所有值得map。訪(fǎng)問(wèn)方法是: mdc.get("myKey")。mdc.get()返回的是Object不是String,要想調用String的方法就要強轉,例如,
|
| throwable | java.lang.Throwable | 如果沒(méi)有異常與日志關(guān)聯(lián)"throwable" 變量為 null. 不幸的是, "throwable" 不能被序列化。在遠程系統上永遠為null,對于與位置無(wú)關(guān)的表達式請使用下面的變量throwableProxy |
| throwableProxy | 與日志事件關(guān)聯(lián)的異常代理。如果沒(méi)有異常與日志事件關(guān)聯(lián),則變量"throwableProxy" 為 null. 當異常被關(guān)聯(lián)到日志事件時(shí),"throwableProxy" 在遠程系統上不會(huì )為null |
<onMatch>:用于配置符合過(guò)濾條件的操作
<onMismatch>:用于配置不符合過(guò)濾條件的操作
例如:過(guò)濾掉所有日志消息中不包含“billing”字符串的日志。
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- 默認為 ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>return message.contains("billing");</expression>
</evaluator>
<OnMatch>ACCEPT </OnMatch>
<OnMismatch>DENY</OnMismatch>
</filter>
<encoder>
<pattern>
%-4relative [%thread] %-5level %logger - %msg%n
</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
<matcher> :
匹配器,盡管可以使用String類(lèi)的matches()方法進(jìn)行模式匹配,但會(huì )導致每次調用過(guò)濾器時(shí)都會(huì )創(chuàng )建一個(gè)新的Pattern對象,為了消除這種開(kāi)銷(xiāo),可以預定義一個(gè)或多個(gè)matcher對象,定以后就可以在求值表達式中重復引用。<matcher>是<evaluator>的子標簽。
<matcher>中包含兩個(gè)子標簽,一個(gè)是<name>,用于定義matcher的名字,求值表達式中使用這個(gè)名字來(lái)引用matcher;另一個(gè)是<regex>,用于配置匹配條件。
例如:
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<matcher>
<Name>odd</Name>
<!-- filter out odd numbered statements -->
<regex>statement [13579]</regex>
</matcher>
<expression>odd.matches(formattedMessage)</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
聯(lián)系客服