https://i.xue.taobao.com/my/learning.htm?spm=a2174.7365761.0.0.oxhqUo
第3章 SpringBoot 日志配置
在市场上存在非常多的日志框架:
日志抽象层 | 日志实现 |
jboss-logging (不适合企业项目开发使用) JCL(Jakarta Commons Logging) (2014年后不 再维护) SLF4j(Simple Logging Facade for Java) (与 log4j Logback 同一个人开发) | JUL (java.util.logging)(担心被抢市场,推出的) Log4j (存在性能问题) Logback (Log4j同一个人开发的新框架,做了重大 升级) Log4j2 ( apache开发的很强大,借了名log4j的名, 但 当前很多框架未适配上) |
Spring Boot 采用了 slf4j+logback 的组合形式,Spring Boot也提供对JUL、log4j2、Logback提供了默认配置
Spring官网参考文档:
https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#boot-features-logging
3.1 默认日志配置
SpringBoot默认配置好了日志, 只要启动 Spring Boot 项目就会在控制台输出日志信息。
package com.mengxuegu.springboot;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot03LoggingApplicationTests {
//日志记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
//1. 以下日志级别,由低到高:trace < debug < info < warn < error
//2. Spring Boot默认设定的是 info 级别日志,(日志默认级别也称为root级别)。
// 可修改默认级别日志:logging.level.level=级别名
//3. 可以进行调整日志级别,设定某个级别后,就只打印设定的这个级别及后面高级别的日志信息
// 没有指定级别的就用SpringBoot默认规定的级别:root级别
//4. 可修改指定包的日志级别:
// 指定某个包下面的所有日志级别:logging.level.包名=级别名
//跟踪运行信息
logger.trace("这是 trace 日志信息!");
//调试信息
logger.debug("这是 debug 日志信息!");
//自定义信息
logger.info("这是 info 日志信息");
//警告信息:如果运行结果是不预期的值,则可以进行警告
logger.warn("这是 warn 日志信息");
//错误信息:出现异常捕获时
logger.error("这是 error 日志信息");
}
}
修改日志默认级别
3.2 修改日志默认配置
application.properties中修改日志默认配置
3.2.1 修改日志文件生成路径
logging.file | logging.path | 示例 | 说明 |
(none) | (none) |
| 只在控制台输出 |
指定文件名 | (none) | springboot.log | 输出到当前项目根路径下的springboot.log文件中 |
(none) | 指定目录 | /springboot/log | 输出到当前项目所在磁盘根路径下的/springboot/log目录中的spring.log文件中 |
指定文件名 | 指定目录 |
| 当两个同事指定时,采用的是logging.file指定。 推荐使用logging.file设置即可,因为它可自定义文件名 |
3.2.2 修改日志输出的格式
3.3 分析日志底层实现
在web项目当中引用了 spring-boot-starter-web 依赖
总结:SpringBoot中默认日志启动器为 spring-boot-starter-logging ,默认采用的是 logback
日志框架
在 spring-boot-2.0.6.RELEASE.jar! \org\springframework\boot\logging\logback\base.xml 做了日志
的默认配置
日志文件采用方式为:滚动文件追加器
在下面类中会读取上面xml中配置的信息
spring-boot-2.0.6.RELEASE.jar!org.springframework.boot.logging.LoggingSystemProperties
如果spring boot的日志功能无法满足我们的需求(比如异步日志记录等),我们可以自已定义的日志配置文件。
3.4 自定义日志配置
3.4.1 自定义Logback日志配置
在类路径下,存放对应日志框架的自定义配置文件即可;SpringBoot就不会使用它默认的日志配置文件了。
Logging System | 自定义日志配置文件名 |
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 |
在 resources 目录下创建 logback.xml , 文件内容如下,SpringBoot就会采用以下日志配置:
logback.xml :是直接就被日志框架加载了。
logback-spring.xml:配置项不会被日志框架直接加载,而是由SpringBoot 解析日志配置文件,进而可以使用
SpringBoot 的 Profile 特殊配置
3.4.2 使用 Profile 特殊配置
使用日志 Profille 特殊配置, 可根据不同的环境激活不同的日志配置
3.5 切换日志框架
将SpringBoot默认的 logback 切换为 log4j2 日志框架, 参考文档
log4j2.xml案例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<properties>
<property name="logPath">log</property>
<property name="logName">third-authen</property>
<property name="errPath">log/error</property>
<property name="errName">third-authen_error</property>
</properties>
<appenders>
<!-- 日志级别 ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF -->
<!-- ACCEPT(接受), DENY(拒绝) 或NEUTRAL(中立) -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="RollingLogFile" filename="${logPath}/${logName}.log"
filepattern="${logPath}/${logName}_%d{yyyy-MM-dd}_%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="1024 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
<RollingFile name="RollingErrFile" filename="${errPath}/${errName}.log"
filepattern="${logPath}/${errName}_%d{yyyy-MM-dd}_%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="1024 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
</appenders>
<loggers>
<root level="info">
<appender-ref ref="RollingLogFile"/>
<!-- <appender-ref ref="RollingNasFile" /> -->
<appender-ref ref="RollingErrFile"/>
</root>
</loggers>
</configuration>
查看当前项目所依赖的其它项目