log4j2 已經出來一段時間了,項目中一直用log4j,log4j2出來後對它有些興趣,這兩天好好地學習了一遍,在這裏寫一個總結,或許將來會用得到。
1,安裝配置
我採用的是maven安裝方法,請先參考J2ee開發環境的建立,然後是查看最新的log4j2的版本是哪個,這個不用去log4j2的官網,可以直接在mavenSearch中查看,輸入log4j2,下面顯示的最新可用版本是2.4.1,好,在項目中的pom.xml中加入如下代碼:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.4.1</version>
</dependency>
,保存,在eclipse中就會自動下載文件並添加到項目路徑
2,log4j2.xml文件配置
log4j2文件是日誌配置文件,注意有2個功能,一是設置輸入格式,二是設置輸入目的地,具體配置參數意義可參考log4jApi,appender的設置請參考appender的節點,這個纔是log4j2強大的地方。以下是我的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%-5level] %C.%M:%L - %m%n" />
</Console>
<!-- <File name="log" fileName="e:\\log.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<RollingFile name="RollingFile" fileName="e:\logs\app.log" filePattern="e:\logs\$${date:yyyy-MM}\app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1 "/>
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingFile> -->
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
把這個文件保存到項目中的src/main/resources目錄下,命名爲log4j2.xml,當然,log4j2有默認配置,沒有這個文件也可以使用,但很明顯,默認的肯定不夠用,也配不來輸出到文件的功能。
3.使用
log4j2要用在java文件上,我個人認爲,可以建個根類,在根類中初始化logger,其他類只要集成根類,就不用再次配置了,很方便,根類如下配置:
package maven;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class BaseAction {
public static final Logger logger=LogManager.getLogger(LogTest.class);
}
根類就是要越簡單越好。其他類使用:
package maven;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LogTest extends BaseAction{
public static void main(String[] args){
logger.entry();
//for(int i=0;i<Integer.MAX_VALUE;i++){
logger.error("Ha Ha");
//}
logger.info("I am {} a {} man","happy","good");
try{
int t=123/0;
}catch(Exception e){
logger.catching(e);
}
logger.exit();
}
}
輸出:
2015-10-21 09:16:29,676 [TRACE] maven.LogTest.main:9 - entry
2015-10-21 09:16:29,677 [ERROR] maven.LogTest.main:11 - Ha Ha
2015-10-21 09:16:29,678 [INFO ] maven.LogTest.main:13 - I am happy a good man
2015-10-21 09:16:29,678 [ERROR] maven.LogTest.main:17 - catching
java.lang.ArithmeticException: / by zero
at maven.LogTest.main(LogTest.java:15) [classes/:?]
2015-10-21 09:16:29,681 [TRACE] maven.LogTest.main:19 - exit
總結:
以上是log4j2的基本使用方法,其變化和技術要點主要在log4j2.xml中的appender的設置上,通過appender可以設置其日誌輸出到控制檯,文件,遠程,數據庫。
一個成熟的項目必須有個成熟的日誌系統,log4j2很顯然可以滿足大部分日誌要求,爲什麼用log4j2而不用log4j呢?對我來說,最主要原因是可以用xml配置,而不是讓人討厭的profie文件。
本文100%原創,你的評論就是對我的最好回報,引用請加上說明和作者。