日志功能是系统的基础功能,日志功能方便我们输出想要的内容到控制台,或者输出到磁盘,尤其是异常日志输出,日志可以按天归档,按天或大小切分,Spring Boot本身内置日志功能。
Spring Boot内部使用Commons Logging日志输出,以保证兼容各种日志框架实现,如Java Util Logging、Log4J2 和Logback。如果使用 spring-boot-starter,Logback将作为默认日志框架引入,当然你可以根据需要替换其他框架。
开始使用
引入spring-boot-starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
查看详情
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.4.4</version>
<scope>compile</scope>
</dependency>
再查看详情
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.13.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.30</version>
<scope>compile</scope>
</dependency>
输出日志
Logback支持SLF4J(Simple Logging Facade for Java是一个日志门面框架,提供了日志系统中常用的接口),Spring封装了注解,使用非常简单。
方法一:使用Slf2j注解
@Slf4j
public class Spring2goUpmsApplication {
public static void main(String[] args) {
SpringApplication.run(Spring2goUpmsApplication.class, args);
STDOUT();
}
private static void STDOUT() {
// Slf4j注解
log.trace("Slf4j trace");
log.debug("Slf4j debug");
log.warn("Slf4j warn");
log.info("Slf4j info");
log.error("Slf4j error");
}
}
方法二:使用LoggerFactory
public class Spring2goUpmsApplication {
public static void main(String[] args) {
SpringApplication.run(Spring2goUpmsApplication.class, args);
STDOUT();
}
private final static Logger logger = LoggerFactory.getLogger(Spring2goUpmsApplication.class);
private static void STDOUT() {
//LoggerFactory
logger.trace("LoggerFactory trace");
logger.debug("LoggerFactory debug");
logger.warn("LoggerFactory warn");
logger.info("LoggerFactory info");
logger.error("LoggerFactory error");
}
}
自定义配置
根据不同的日志系统,可以使用下列的默认配置名称,Spring Boot启动是将自动扫描加载。
日志系统 | 配置文件 |
---|---|
Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
创建对应的配置文件,放在resource文件夹下即可,当然也可以通过logging.file.name和logging.file.path指定对应的配置文件。
注意:
Spring官方建议优先使用-spring结尾命名的xml文件。
以下为常用的logback.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/spring2go" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.spring2go" level="info" />
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />
<root level="info">
<appender-ref ref="console" />
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
</configuration>
上述配置文件定义的日志输出的规则,如存放位置,格式和存储等,具体配置含义请参考官网:https://logback.qos.ch/manual/index.html。
参考资料
-
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-logging