Apache Log4j 2 是Log4j 的升級版,在該版本實現中,日誌的處理流程及效率有了顯著提高。
此外新版本也合入了一些logback日誌框架體系的一些改進點。html
支持多API,包括Log4j 1.2, SLF4J, Commons Logging 以及 java.util.logging (JUL) APIs.java
直接與Tomcat/Jetty等應用服務器集成web
<dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.5</version> </dependency> </dependencies>
配置路徑
log4j2默認會在classpath目錄下尋找log4j.json、log4j.jsn、log4j2.xml等名稱的文件,若是都沒有找到,則會按默認配置輸出,也就是輸出到控制檯spring
代碼樣例apache
public static void main(String[] args) { Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME); logger.trace("trace level"); logger.debug("debug level"); logger.info("info level"); logger.warn("warn level"); logger.error("error level"); logger.fatal("fatal level"); }
默認配置json
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <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="error"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration>
格式說明api
%d{HH:mm:ss.SSS} 表示輸出到毫秒的時間 %t 輸出當前線程名稱 %-5level 輸出日誌級別,-5表示左對齊而且固定輸出5個字符,若是不足在右邊補0 %logger 輸出logger名稱,由於Root Logger沒有名稱,因此沒有輸出 %msg 日誌文本 %n 換行 %F 輸出所在的類文件名,如Client.java %L 輸出行號 %M 輸出所在方法名 %l 輸出語句所在的行數, 包括類名、方法名、文件名、行數
更多格式說明服務器
log4j2.xml,以Configuration爲根節點,有一個status屬性,這個屬性表示log4j2自己的日誌信息打印級別。
若是把status改成TRACE再執行測試代碼,能夠看到控制檯中打印了一些log4j加載插件、組裝logger等調試信息。多線程
在生產系統中一般須要定義不一樣模塊的日誌,此外日誌文件的Rolling也須要作相應配置。
一種比較常見的需求是按日期和大小(二者知足其一)則產生日誌滾動。經過log4j2能夠輕鬆的實現。app
配置示例
<Configuration status="WARN" monitorInterval="300"> <properties> <property name="LOG_ROOT">/var/log/app</property> <property name="FILE_NAME">application</property> </properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}–[%t] %-5level -%l - %msg%n" /> </Console> <RollingRandomAccessFile name="MainFile" fileName="${LOG_ROOT}/${FILE_NAME}.log" filePattern="${LOG_ROOT}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd HH}-%i.log"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}–[%t] %-5level -%l - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy interval="1" /> <SizeBasedTriggeringPolicy size="50 MB" /> </Policies> <DefaultRolloverStrategy max="20" /> </RollingRandomAccessFile> </Appenders> <Loggers> <Logger name="main" level="trace" additivity="false"> <AppenderRef ref="MainFile" /> </Logger> <Root level="error"> <AppenderRef ref="Console" /> <AppenderRef ref="MainFile" /> </Root> </Loggers> </Configuration>
說明
log4j2整合slf4j
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency>
Log4j2基礎到實踐
RollingFileAppender定義
web應用程序集成
Springboot集成slf4j-log4j2