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: 表示以文件方式记录。可以设置日志文件的文件名以及格式,一般会加上时间戳;
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 是一个独立的日志系统。可以在需要提供日志的项目中以模块化的方式轻松使用。
log4j 有很多可配置项,大家可以参考官方文档。对于本课程的配置而言,已经足够常规要求。