本文是使用 Maven + springMVC + slf4j + log4j2(v2.7) 示例,並非純粹的 log4j2 ,若是執行不使用 slf4j,只須要在調用的地方,修改 loggerFactory 便可。spring
通常狀況下,不作特殊配置,是會打印出不少spring的日誌信息,因此文章後續在講解配置文件時,會提到如何爲指定的類作特定配置。apache
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version> </dependency> <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-slf4j-impl</artifactId> <version>2.7</version> </dependency>
注:若未使用 slf4j,則不須要引入 log4j-slf4j-impl。api
添加位置: ${project}/src/main/resources 根目錄session
<?xml version="1.0" encoding="UTF-8"?> <!-- 日誌級別 trace, debug, info, warn, error, fatal --> <!-- status:log4j相關的日誌的打印級別,OFF即不打印,其餘則按照標準級別配置便可,如 debug --> <Configuration status="OFF"> <!-- 定義日誌存放目錄(相對路徑) --> <properties> <property name="logPath">logs</property> </properties> <!-- 定義全部的輸出器 --> <Appenders> <!-- 輸出到控制檯,下面分別是 debug、info、error 級別的配置 --> <Console name="ConsoleDebugLog" target="SYSTEM_OUT"> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%xEx%n" /> </Console> <Console name="ConsoleInfoLog" target="SYSTEM_OUT"> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%xEx%n" /> </Console> <Console name="ConsoleErrorLog" target="SYSTEM_OUT"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%xEx%n" /> </Console> <!-- INFO級別日誌 按天輸出到文件,歸類到年月目錄 --> <RollingFile name="InfoRollingFileLog" fileName="${logPath}/heyvgou.log" filePattern="${logPath}/$${date:yyyyMM}/heyvgou-%d{yyyy-MM-dd}.log"> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%xEx%n" /> <Policies> <TimeBasedTriggeringPolicy modulate="true" interval="1"/> </Policies> </RollingFile> <!-- ERROR級別日誌 按天輸出到文件,歸類到年月目錄 --> <RollingFile name="ErrorRollingFileLog" fileName="${logPath}/heyvgou-error.log" filePattern="${logPath}/$${date:yyyyMM}/heyvgou-error.log-%d{yyyy-MM-dd}.log"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%xEx%n" /> <Policies> <TimeBasedTriggeringPolicy modulate="true" interval="1"/> </Policies> </RollingFile> </Appenders> <Loggers> <!-- 項目總體默認日誌配置,此處最低級別爲 debug --> <Root level="debug"> <AppenderRef ref="ConsoleDebugLog" /> <AppenderRef ref="InfoRollingFileLog" /> <AppenderRef ref="ErrorRollingFileLog" /> </Root> <!-- 針對指定的 source package 代碼配置(若比默認配置的日誌級別高,則至關於忽略默認配置的級別打印,實現去除「沒必要要」的日誌)--> <logger name="org.springframework" level="INFO" additivity="false"> <AppenderRef ref="ConsoleInfoLog" /> <AppenderRef ref="ErrorRollingFileLog" /> </logger> <logger name="net.sf" level="INFO" additivity="false"> <AppenderRef ref="ConsoleErrorLog" /> <AppenderRef ref="ErrorRollingFileLog" /> </logger> </Loggers> </Configuration>
上面的配置中已經存有不少註釋,因此簡單的就不在此作解釋,下面是針對一些特殊配置作一些簡要的分析和描述ui
本人是分不一樣級別配置 Console ,主要是爲了在後面針對不一樣的類、代碼包作配置,指定輸出級別,避免「沒必要要」的日誌輸出。插件
<logger name="org.springframework" level="INFO" additivity="false"> <AppenderRef ref="ConsoleInfoLog" /> <AppenderRef ref="ErrorRollingFileLog" /> </logger> <logger name="net.sf" level="INFO" additivity="false"> <AppenderRef ref="ConsoleErrorLog" /> <AppenderRef ref="ErrorRollingFileLog" /> </logger>
你們能夠看到,我這裏分別配置了2個debug
org.springframework:INFO 級別的打印日誌,ERROR 級別的文件日誌日誌
net.sf:ERROR 級別的打印日誌,ERROR 級別的文件日誌code
此處我配置的都是 package,那是否能夠直接指定到類呢?答案是能夠的,好比說 org.springframework.beans.factory.BeanFactoryxml
咱們如今使用的 log4j2 API,都是它自帶的,好比說打印的格式 %d{yyyy-MM-dd HH:mm:ss} 日期、%logger{36} 類名 等,若是咱們實現了自定義的插件,好比說 %sessionId 當前的會話ID 等,實現 Converter 接口便可。
通常的實現仍是挺簡單的
有沒有同窗想過,在日誌文件中,默認打印出當前登陸的用戶信息?注意,是默認打印出來的,不是本身 logger.info("當前登陸的用戶名:" + user.getName()),而是 logger.info("當前登陸的用戶名:")
因爲本文只是簡介 log4j2 的環境搭建及配置,本人會在後續的博客中陸續發佈 lo4j2 的一些封裝文章以及插件的開發教程,歡迎你們關注留意。
敬請期待!