背景html
log4j2相對於log4j 1.x有了脫胎換骨的變化,其官網宣稱的優點有多線程下10幾倍於log4j 1.x和logback的高吞吐量、可配置的審計型日誌、基於插件架構的各類靈活配置等。java
官方配置文檔:http://logging.apache.org/log4j/2.x/manual/configuration.htmlweb
一、所需jarapache
1)maven配置json
<dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version> </dependency> </dependencies>
網頁的話還要加入以下的maven配置:api
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <scope>runtime</scope> </dependency>
2)使用jar多線程
log4j-api-2.7.jar
log4j-core-2.7.jar
二、配置日誌打印文件架構
java項目尋找log4j2配置文件會依次讀取classpath是否有下面這些文件:app
咱們在main/src/resource目錄下添加log4j2.xml文件。文件內容以下:dom
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <!-- 變量配置 --> <Properties> <Property name="log_path">${sys:catalina.home}/logs/zcrTest/</Property> </Properties> <!-- appender配置 --> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" /> </Console> <RollingFile name="DailyRollingFile" fileName="${log_path}/zcrTest.log" filePattern="${log_path}/zcrTest%d{yyyy-MM-dd}.log"> <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" /> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="10 MB" /> </RollingFile> </Appenders> <Loggers> <Logger name="mylog" level="trace" additivity="false"> <AppenderRef ref="DailyRollingFile" /> </Logger> <!-- 配置要使用的appender -->
<!-- additivity開啓的話,因爲這個logger也是知足root的,因此會被打印兩遍。 不過root logger 的level是error,爲何Bar 裏面的trace信息也被打印兩遍呢 -->
<Root level="info"> <AppenderRef ref="Console" /> <AppenderRef ref="DailyRollingFile"/> </Root> </Loggers> </Configuration>
上面的log4j2.xml中以Configuration爲根節點,有一個status屬性,這個屬性表示log4j2自己的日誌信息打印級別。若是把status改成TRACE再執行測試代碼,能夠看到控制檯中打印了一些log4j加載插件、組裝logger等調試信息。
日誌級別從低到高分爲TRACE < DEBUG < INFO < WARN < ERROR < FATAL,若是設置爲WARN,則低於WARN的信息都不會輸出。對於Loggers中level的定義一樣適用。
上面配置了兩種日誌打印的方式,打印的等級是info。
Rolling的意思是當知足必定條件後,就重命名原日誌文件用於備份,並重新生成一個新的日誌文件。例如需求是天天生成一個日誌文件,可是若是一天內的日誌文件體積已經超過1G,就重新生成,兩個條件知足一個便可。這在log4j 1.x原生功能中沒法實現,在log4j2中就很簡單了。
RollingRandomAccessFile的屬性:
TimeBasedTriggeringPolicy 這個配置須要和filePattern結合使用,注意filePattern中配置的文件重命名規則是${log_path}/zcrTest%d{yyyy-MM-dd}.log,最小的時間粒度是dd,即分鐘,TimeBasedTriggeringPolicy指定的size是1,結合起來就是每一天生成一個新文件。若是改爲%d{yyyy-MM-dd HH},最小粒度爲小時,則每個小時生成一個文件。
三、調用
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; private static Logger logger = LogManager.getLogger(APIV1Filter.class);
logger.info(..);
logger.error(..)
四、若是是web項目還要加入以下的配置
<context-param> <param-name>log4jConfiguration</param-name> <param-value>"log4j2.xml所在目錄"/log4j2.xml</param-value> </context-param> <listener> <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> </listener>
致謝,感謝您的閱讀!