Log4J2基本配置
阿新 • • 發佈:2018-12-12
Log4j2環境搭建
1.去官方下載log4j,匯入jar包
log4j-core-xx.jar
log4j-api-xx.jar
2.開始使用:
如果要在某個類下使用log4j做日誌記錄(強烈建議使用slfj的API,不要使用其他日誌的系統API):
private static Logger logger = LogManager.getLogger(MyApp.class.getName());
3.日誌級別
log4j規定了預設的幾個級別:trace<debug<info<warn<error<fatal等
配置檔案詳解
例子1: <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </appenders> <loggers> <!--我們只讓這個logger輸出trace資訊,其他的都是error級別--> <!-- additivity開啟的話,由於這個logger也是滿足root的,所以會被列印兩遍。 不過root logger 的level是error,為什麼Bar 裡面的trace資訊也被列印兩遍呢 --> <logger name="cn.lsw.base.log4j2.Hello" level="trace" additivity="false"> <appender-ref ref="Console"/> </logger> <root level="error"> <appender-ref ref="Console"/> </root> </loggers>
先簡單介紹一下下面這個配置檔案:
1)根節點configuration,然後有兩個子節點:appenders和loggers(都是複數,意思就是可以定義很多個appender和logger了)(如果想詳細的看一下這個xml的結構,可以去jar包下面去找xsd檔案和dtd檔案)
2)appenders:這個下面定義的是各個appender,就是輸出了,有好多類別,這裡也不多說(容易造成理解和解釋上的壓力,一開始也未必能聽懂,等於白講),先看這個例子,只有一個Console,這些節點可不是隨便命名的,Console就是輸出控制檯的意思。然後就針對這個輸出設定一些屬性,這裡設定了PatternLayout就是輸出格式了,基本上是前面時間,執行緒,級別,logger名稱,log資訊等,差不多,可以自己去查他們的語法規則。
3)loggers下面會定義許多個logger,這些logger通過name進行區分,來對不同的logger配置不同的輸出,方法是通過引用上面定義的logger,注意,appender-ref引用的值是上面每個appender的name,而不是節點名稱。
例子2:
<configuration status="error">
<!--先定義所有的appender-->
<appenders>
<!--這個輸出控制檯的配置-->
<Console name="Console" target="SYSTEM_OUT">
<!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)-->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!--這個都知道是輸出日誌的格式-->
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<!--檔案會打印出所有資訊,這個log每次執行程式會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用-->
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!--這個會打印出所有的資訊,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔-->
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="50MB"/>
</RollingFile>
</appenders>
<!--然後定義logger,只有定義了logger並引入的appender,appender才會生效-->
<loggers>
<!--建立一個預設的root的logger-->
<root level="trace">
<appender-ref ref="RollingFile"/>
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>