Log4j 1.x和log4j2.x仍是有一些不一樣的地方,下面作一些簡單的使用。首先,下載log4j2.x
html
http://logging.apache.org/log4j/2.x/download.html 而後解壓,下面是2.3的部分jar包。java
在項目中導入jar包apache
在eclipse中新建一個名爲Log4j2的java工程,工程名上右鍵選擇屬性或者直接alt+enter快捷鍵。選擇Java Build Pathjson
選擇Add Library 而後選擇User Library 而後next,在選擇User Library而後選擇new新建一個library。數據結構
選擇Add Extenal Jar,選擇下面兩個jar包就能夠了app
而後建立類LogTest以下eclipse
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Logger; public class LogTest { private static final Logger logger = (Logger) LogManager.getLogger(LogTest.class); public static void main(String[] args) { logger.info("log4j2 test"); } }
運行,報錯ui
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.搜索引擎
爲何會報錯了,很明顯的問題嗎?咱們連配置文件都沒有固然要包配置文件沒有找到嘛。spa
這裏先說一說log4j2中的配置的4種方式:
1. 經過一個XML,JSON,YAML的配置文件來配置。
2. 建立一個ConfigurationFactory而且實現Configuration接口。
3. 調用實現了Configuration接口的類,更改默認設置。
4. 調用Loggerd的內部方法。
這裏咱們只用第一個,經過XML文件來配置Log4j2.
那麼問題來了咱們的配置文件放在什麼地方呢?log4j2怎麼找到咱們的配置文件呢?咱們請教一下發現
官方文檔說:當log4j啓動的時候,會首先找到全部的ConfigurationFactory而後按權重排序。
1.會找系統屬性(system property)
2. log4j2-test.yaml或者log4j2-test.yam
3. log4j2-test.json 或者log4j2-test.jsn
4. log4j2-test.xml
5. log4j2.yaml 或者 log4j2.yml
6. log4j2.json 或者log4j2.jsn
7. log4j2.xml
8. 若是以上都沒有找到就用默認的DefaultConfiguration
解釋一下,system properties就是設置java裏的Properties,能夠經過System.getProperties();獲得。
Log4j2中經過下面的方式設置配置文件的位置
System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j2.xml");
2~7的文件必須是在classpath路徑中的,能夠經過
System.out.println(System.getProperty("java.class.path"));來看一看classpath的路徑,而後隨便放在其中一個就能夠了,在eclipse中最簡單的就是直接放在項目的bin目錄下。
yaml,json和xml均可以理解爲一種特殊的數據結構,用他們存在和解析數據很方便,有哪個不知道能夠用搜索引擎搜一下。
下面咱們來試一試第一種方式:system property的方式。
首先準備一個名爲log4j.xml的XML文件。文件的內容以下:
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </appenders> <loggers> <root level="trace"> <appender-ref ref="Console"/> </root> </loggers> </configuration>
咱們先無論文件的意思,先來改一改代碼。
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory; public class LogTest { private static final Logger logger = (Logger) LogManager.getLogger(LogTest.class); public static void main(String[] args) { System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml"); logger.info("log4j2 test"); } }
運行一下,仍是ERROR StatusLogger No log4j2 configuration file found.他和我槓上了,嗯,讓我想想。
private static final Logger logger = (Logger) LogManager.getLogger(LogTest.class);
看一看這一句,修飾詞是static,這意味着在執行main方法時也就是在
System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml");
以前就已經初始化了logger,因此仍是找不到文件也是可以理解的。
咱們再改一改,改爲下面的樣子:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory; public class LogTest { static { System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml"); } private static final Logger logger = (Logger) LogManager.getLogger(LogTest.class); public static void main(String[] args) { // System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml"); logger.info("log4j2 test"); } }
是否是就OK了。
如今咱們試一試方法7,把log4j.xml文件移動到項目的src或者bin文件夾下,而後程序改成下面的樣子:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Logger; //import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory; public class LogTest { // static // { // System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml"); // } private static final Logger logger = (Logger) LogManager.getLogger(LogTest.class); public static void main(String[] args) { // System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"log4j.xml"); logger.info("log4j2 test"); } }
運行,什麼鬼,又找不到文件,4j2哥不要這樣玩我。惹不起,我搖人,找到4j2的文檔大哥打聽一下,發現他找的是log4j2.xml不是log4j.xml.再改一改文件名,聽4j2文檔大哥的話,改成log4j2.xml,放在項目的src文件夾下。
OK,搞定,搖人就是管用,像ERROR StatusLogger No log4j2 configuration file found.這個小東西都不敢瞅我了。
參考:
http://logging.apache.org/log4j/2.x/manual/configuration.html