Spring MVC 日志配置
1. 前言
本章節(jié)將和大家一起聊聊在 Spring MVC 項(xiàng)目中如何添加日志系統(tǒng)。通過本課程,你將了解到:
- 添加 log4j 日志子系統(tǒng)的流程。這個(gè)是本章節(jié)的重點(diǎn);
- log4j 日志系統(tǒng)的相關(guān)配置。
2. log4j 日志框架
企業(yè)級(jí)的項(xiàng)目都會(huì)標(biāo)配日志子系統(tǒng)。日志系統(tǒng)可以記錄項(xiàng)目運(yùn)行過程的所有信息,通過這些信息可以很方便幫助開發(fā)人員找到項(xiàng)目運(yùn)行過程的問題。
日志系統(tǒng)也可以記載用戶的使用記錄,這些信息可以幫助開發(fā)者分類、歸納用戶的使用入口,更好的維護(hù)系統(tǒng)的安全性。除此之外,日志信息還有更多其它用途。
眾多流行、優(yōu)秀的日志框架中,本課程主推 log4j。log4j 日志系統(tǒng)有兩個(gè)版本,使用時(shí)有很大差異性。基于 Spring 5.X 版本的項(xiàng)目中建議使用 log4j 2 版本。
2.1 添加日志框架
本小節(jié)主要介紹在 Spring MVC 項(xiàng)目中如何集成 log4j 2 日志系統(tǒng)。
- 打開項(xiàng)目的 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 個(gè)依賴包,log4j-web 是針對(duì)于 WEB 應(yīng)用程序的依賴包。
- 新建名為 log4j2.xml 的配置文件;
Tips: log4j2 不再支持 properties 格式的文件,只支持 xml,json 或是 yaml,不指定位置的情況下默認(rèn)在 src/main/resources 下查找。
提供如下最基礎(chǔ)的配置內(nèi)容:
<?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 配置內(nèi)容簡要說明:
- Appender: 信息輸出位置,可以有多個(gè)輸出口。 SYSTEM_OUT 的目標(biāo)是 Console 。表示把日志內(nèi)容輸出到控制臺(tái)上。Root Logger 的級(jí)別是 info。所有 info 及以上級(jí)別的日志才會(huì)記錄;
Tips: 日志級(jí)別分別有 TRACE、 DEBUG 、NFO 、WARN 、ERROR 、 FATAL 這幾種,日志級(jí)別從左向右依次增加。日志信息的輸出由當(dāng)前日志級(jí)別決定,只有比當(dāng)前級(jí)別高的信息才能輸出。
- RollingRandomAccessFile: 表示以文件方式記錄。可以設(shè)置日志文件的文件名以及格式,一般會(huì)加上時(shí)間戳;
Tips: 本文側(cè)重于講解在 Spring MVC 項(xiàng)目中如何使用 log4j 日志系統(tǒng)。log4j 其它的配置信息大家可以查閱官方文檔: 。
- 如果希望日志信息既輸出到控制臺(tái),又能輸出到文件中,務(wù)必使用 AppenderRef 標(biāo)簽引用控制臺(tái)配置名稱和文件配置名稱。
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="smlog" />
</Root>
log4j2 的配置文件開發(fā)者可以根據(jù)需要存放在其它位置,但需要在 web.xml 文件中配置 log4j 提供的監(jiān)聽器。
<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 配置文件放在默認(rèn)位置,避開上面的配置。Servlet2.5 以上,可以不用配置監(jiān)聽器。
- 使用測試。
使用很簡單,在你需要使用日志的地方,創(chuàng)建一個(gè)日志對(duì)象。
public class Test {
static Logger logger = LogManager.getLogger(Test.class);
public static void main(String[] args) {
logger.info("info","messgae");
}
}
運(yùn)行上面代碼,除了在控制臺(tái)上輸出信息外,且還會(huì)把內(nèi)容寫入到日志文件中。
日志對(duì)象的 i 常用方法如下:
- debug():輸出 debug 級(jí)別信息;
- error():輸出 error 級(jí)別的信息;
- fatal():輸出 fatal 級(jí)別的信息;
- info():輸出 info 級(jí)別的信息;
- trace():輸出 trace 級(jí)別的信息;
- warn():輸出 warn 級(jí)別的信息。
以上幾個(gè)方法除了語義上的區(qū)別,使用起來沒有本質(zhì)的區(qū)別。通過語義上的差異性,log4j 可以控制信息的輸出級(jí)別。
3. 小結(jié)
本章節(jié)和大家一起聊了聊在 Spring MVC 項(xiàng)目如何使用 log4j 2 日志系統(tǒng)。log4j 是一個(gè)獨(dú)立的日志系統(tǒng)??梢栽谛枰峁┤罩镜捻?xiàng)目中以模塊化的方式輕松使用。
log4j 有很多可配置項(xiàng),大家可以參考官方文檔。對(duì)于本課程的配置而言,已經(jīng)足夠常規(guī)要求。