Spring MVC 日志配置
1. 前言
本章節將和大家一起聊聊在 Spring MVC 項目中如何添加日志系統。通過本課程,你將了解到:
- 添加 log4j 日志子系統的流程。這個是本章節的重點;
- log4j 日志系統的相關配置。
2. log4j 日志框架
企業級的項目都會標配日志子系統。日志系統可以記錄項目運行過程的所有信息,通過這些信息可以很方便幫助開發人員找到項目運行過程的問題。
日志系統也可以記載用戶的使用記錄,這些信息可以幫助開發者分類、歸納用戶的使用入口,更好的維護系統的安全性。除此之外,日志信息還有更多其它用途。
眾多流行、優秀的日志框架中,本課程主推 log4j。log4j 日志系統有兩個版本,使用時有很大差異性?;?Spring 5.X 版本的項目中建議使用 log4j 2 版本。
2.1 添加日志框架
本小節主要介紹在 Spring MVC 項目中如何集成 log4j 2 日志系統。
- 打開項目的 pom.xml 文件,添加 log4j 的依賴包;
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.10.0</version>
</dependency>
Tips: 這里有 3 個依賴包,log4j-web 是針對于 WEB 應用程序的依賴包。
- 新建名為 log4j2.xml 的配置文件;
Tips: log4j2 不再支持 properties 格式的文件,只支持 xml,json 或是 yaml,不指定位置的情況下默認在 src/main/resources 下查找。
提供如下最基礎的配置內容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<RollingRandomAccessFile name="smlog"
fileName="sm.log"
filePattern="$${date:yyyy-MM}/sm-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout
pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Logger name="org.springframework" level="DEBUG" />
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="smlog" />
</Root>
</Loggers>
</Configuration>
log4j2 配置內容簡要說明:
- Appender: 信息輸出位置,可以有多個輸出口。 SYSTEM_OUT 的目標是 Console 。表示把日志內容輸出到控制臺上。Root Logger 的級別是 info。所有 info 及以上級別的日志才會記錄;
Tips: 日志級別分別有 TRACE、 DEBUG 、NFO 、WARN 、ERROR 、 FATAL 這幾種,日志級別從左向右依次增加。日志信息的輸出由當前日志級別決定,只有比當前級別高的信息才能輸出。
- RollingRandomAccessFile: 表示以文件方式記錄??梢栽O置日志文件的文件名以及格式,一般會加上時間戳;
Tips: 本文側重于講解在 Spring MVC 項目中如何使用 log4j 日志系統。log4j 其它的配置信息大家可以查閱官方文檔: 。
- 如果希望日志信息既輸出到控制臺,又能輸出到文件中,務必使用 AppenderRef 標簽引用控制臺配置名稱和文件配置名稱。
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="smlog" />
</Root>
log4j2 的配置文件開發者可以根據需要存放在其它位置,但需要在 web.xml 文件中配置 log4j 提供的監聽器。
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>classpath:log4j2.xml</param-value>
</context-param>
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
Tips: 最佳方案是把 log4j 的 log4j2.xml 配置文件放在默認位置,避開上面的配置。Servlet2.5 以上,可以不用配置監聽器。
- 使用測試。
使用很簡單,在你需要使用日志的地方,創建一個日志對象。
public class Test {
static Logger logger = LogManager.getLogger(Test.class);
public static void main(String[] args) {
logger.info("info","messgae");
}
}
運行上面代碼,除了在控制臺上輸出信息外,且還會把內容寫入到日志文件中。
日志對象的 i 常用方法如下:
- debug():輸出 debug 級別信息;
- error():輸出 error 級別的信息;
- fatal():輸出 fatal 級別的信息;
- info():輸出 info 級別的信息;
- trace():輸出 trace 級別的信息;
- warn():輸出 warn 級別的信息。
以上幾個方法除了語義上的區別,使用起來沒有本質的區別。通過語義上的差異性,log4j 可以控制信息的輸出級別。
3. 小結
本章節和大家一起聊了聊在 Spring MVC 項目如何使用 log4j 2 日志系統。log4j 是一個獨立的日志系統??梢栽谛枰峁┤罩镜捻椖恐幸阅K化的方式輕松使用。
log4j 有很多可配置項,大家可以參考官方文檔。對于本課程的配置而言,已經足夠常規要求。