前期環境
Spring mvc + Maven + Idea
一、下面開始配置log4j2,先簡單演示其如何配置,再仔細了解log4j2用法。
1.1 配置pom.xml,引用log4j2相關包
<!--log4j2支持--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.11.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.11.2</version> </dependency>
如果不知道該引用哪些包,可以在log4j2官網查看其最新的Jar包 https://logging.apache.org/log4j/2.x/maven-artifacts.html
1.2 配置簡單的log4j2.xml配置文件
在項目的classpath目錄下新建log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- 配置LoggerConfig,即Appenders的日志級別為WARN --> <Configuration status="WARN"> <!-- Appenders支持配置多個Appender,支持向不同的目標輸送日志,本例為配置向控制台輸出 --> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <!-- Loggers支持配置多個Logger,可引用不同的目標Appender,也可根據業務需求定制特定要求的Appender --> <Loggers> <Root level="info"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration>
1.3 在web.xml文件里引用log4j2.xml
<context-param> <param-name>log4jConfiguration</param-name> <param-value>classpath:log4j2.xml</param-value> </context-param>
如果項目中使用的是Servlet2.5以上版本,則不需要配置用於log4j2的監聽,所以現在一般不需要在單獨為log4j2配Listener
1.4 測試日志輸出
從上圖看出,成功輸出日志,說明log4j2初步配置成功。
二、log4j2相關基礎
2.1 分析上例
PatternLayout寫法
<PatternLayout pattern="%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
%d{yyyy/MM/dd HH:mm:ss.SSS} 輸出時間格式 (對應上例 2019/04/11 20:35:10.650)
[%t] 輸出當前線程名稱 (對應上例 [http-nio-8080-exec-6] )
%-5level 輸出日志級別,-5表示左對齊並且固定輸出5個字符,如果不足在右邊補0 (對應上例 INFO)
%logger{36} 輸出logger名稱,因為Root Logger沒有名稱,所以沒有輸出,只輸出了對應類 myProject.Controller.LoginController2
%msg 輸出日志文本
%n 換行
其他常用的占位符有:
%F 輸出所在的類文件名,如LoginController2.java
%L 輸出行號
%M 輸出所在方法名
%l 輸出語句所在的行數, 包括類名、方法名、文件名、行數
2.2 log4j2日志級別
TRACE < DEBUG < INFO < WARN < ERROR < FATAL,分別用來指定這條日志信息的重要程度,Log4j有一個規則:只輸出級別不低於設定級別的日志信息,假設Loggers級別設定為INFO,則INFO、WARN、ERROR和FATAL級別的日志信息都會輸出,而級別比INFO低的DEBUG和TRACE則不會輸出。
下面還是用上例的配置測試其日志級別
由於配置文件中LoggerConfig定義的級別為WARN,即<Configuration status="WARN">,所以正常只有WARN,ERROR和FATAL會打印,但驗證結果多了個INFO,是因為在Logger中引用了控制台的Appender,並單獨指定了級別為INFO,即<Root level="info">,說實話不是很懂,所以開始了解log4j2的標簽。
2.3 log4j2常用標簽
<Configuration> log4j2.xml的根標簽 status 設置的是log4j2自身內部的信息輸出級別,輸出到控制台
<Appenders> 這個標簽包含多個<Appender/>
子標簽,用於指定日志輸出的位置及格式。待續
下面來看一個復雜點的配置文件,將不同級別的日志輸出到不同的日志文件中,該配置參考博客