1. Log4j2的導入
首先到http://logging.apache.org/log4j/2.x/download.html 上下載最新的log4j2的jar包,然后再eclipse中加入log4j-api-2.4.1.jar和log4j-core-2.4.1.jar,需要注意的是不要將所有jar都導入工程造成不必要的混亂。
2.LogEvent
左邊豎欄是Event的Level,右邊橫欄是LoggerConfig(即filter)的Level。Yes的意思就是這個event可以通過filter,no的意思就是不能通過filter。
可以看到,INFO級別的Event是無法被ERROR級別的LoggerConfig的filter接受的。所以,INFO信息不會被輸出。
3.配置文件編寫
log4j2與以往的log4j有一個明顯的不同,其配置文件只能采用.xml, .json或者 .jsn,而不是.properties文件。其格式如下:

1 <?xml version="1.0" encoding="UTF-8"?> 2 <configuration status="error"> 3 <!--先定義所有的appender--> 4 <appenders> 5 <!--這個輸出控制台的配置--> 6 <Console name="Console" target="SYSTEM_OUT"> 7 <!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)--> 8 <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> 9 <!--這個都知道是輸出日志的格式--> 10 <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M ==> %msg%xEx%n"/> 11 </Console> 12 <!--文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用--> 13 <File name="log" fileName="log/test.log" append="false"> 14 <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M ==> %msg%xEx%n"/> 15 </File> 16 <!--這個會打印出所有的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面並進行壓縮,作為存檔--> 17 <RollingFile name="RollingFile" fileName="logs/app.log" 18 filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> 19 <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> 20 <SizeBasedTriggeringPolicy size="50MB"/> 21 </RollingFile> 22 </appenders> 23 <!--然后定義logger,只有定義了logger並引入的appender,appender才會生效--> 24 <loggers> 25 <!--建立一個默認的root的logger--> 26 <root level="trace"> 27 <appender-ref ref="RollingFile"/> 28 <appender-ref ref="Console"/> 29 </root> 30 </loggers> 31 </configuration>
4.配置文件名稱及路徑
(1)放在classpath(src)下,以log4j2.xml命名
使用Log4j2的一般都約定俗成的寫一個log4j2.xml放在src目錄下使用。
(2)將配置文件放到別處
在系統工程里面,將log4j2的配置文件放到src目錄底下很不方便。如果能把工程中用到的所有配置文件都放在一個文件夾里面,當然就更整齊更好管理了。但是想要實現這一點,前提就是Log4j2的配置文件能重新定位到別處去,而不是放在classpath底下。
看看文檔里怎么說吧:
1.Log4j will inspect the "log4j.configurationFile" system property and, if set,will attempt to load the configuration using the ConfigurationFactory that matches the file extension.
2.If no system property is set the JSON ConfigurationFactory will look for log4j2-test.json or log4j2-test.jsn in the classpath.
3.If no such file is found the XML ConfigurationFactory will look for log4j2-test.xml in the classpath.
4.If a test file cannot be located the JSON ConfigurationFactory will look for log4j2.json or log4j2.jsn on the classpath.
5.If a JSON file cannot be located the XML ConfigurationFactory will try to locate log4j2.xml on the classpath.
6.If no configuration file could be located the DefaultConfiguration will be used. This will cause logging output to go to the console.
可見,如果沒有設置"log4j.configurationFile" system property的話,application將在classpath中按照如下查找順序來找配置文件:
log4j2-test.json 或log4j2-test.jsn文件
log4j2-test.xml文件
log4j2.json 或log4j2.jsn文件
log4j2.xml文件
如果想將配置文件重命名並放到別處,就需要設置系統屬性log4j.configurationFile。
設置的方式是在VM arguments中寫入該屬性的key和value:
-Dlog4j.configurationFile="D:\learning\blog\20130115\config\LogConfig.xml"
在myeclipse中,就是 右鍵-》run as -》run configuration-》右邊窗口的“(x)=argument”=》VM arguments
然后寫入上述key和value即可。
-D是參數,不能缺少。
測試
在“D:\learning\blog\20130115\config\”路徑下編寫文件:
root LoggerConfig的Level設為INFO。
在myeclipse中寫入log4j.configurationFile系統屬性:
測試的java程序如上文,在此不再重復。運行,console輸出如下: