章节索引 :

Spring MVC 日志配置

1. 前言

本章节将和大家一起聊聊在 Spring MVC 项目中如何添加日志系统。通过本课程,你将了解到:

  • 添加 log4j 日志子系统的流程。这个是本章节的重点;
  • log4j 日志系统的相关配置。

2. log4j 日志框架

企业级的项目都会标配日志子系统。日志系统可以记录项目运行过程的所有信息,通过这些信息可以很方便帮助开发人员找到项目运行过程的问题。

日志系统也可以记载用户的使用记录,这些信息可以帮助开发者分类、归纳用户的使用入口,更好的维护系统的安全性。除此之外,日志信息还有更多其它用途。

众多流行、优秀的日志框架中,本课程主推 log4jlog4j 日志系统有两个版本,使用时有很大差异性。基于 Spring 5.X 版本的项目中建议使用 log4j 2 版本。

2.1 添加日志框架

本小节主要介绍在 Spring MVC 项目中如何集成 log4j 2 日志系统。

  1. 打开项目的 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 应用程序的依赖包。

  1. 新建名为 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 以上,可以不用配置监听器。

  1. 使用测试。

使用很简单,在你需要使用日志的地方,创建一个日志对象。

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 有很多可配置项,大家可以参考官方文档。对于本课程的配置而言,已经足够常规要求。