目录
日志是应用程序不可或缺的一部分,记录着程序运行的信息。主要作用有:
- 记录日常运营的重要信息
- 记录应用报错信息
- 记录过程数据等
logback
Logback 作为 Spring Boot 的默认日志实现框架,异步吞吐量相比于Log4j更加强大:
组件 | 说明 |
---|---|
Logger | 日志记录器,存放日志对象,负责日志分类和级别控制 |
Appender | 指定日志输出目的地 |
Layout | 日志格式转换成字符串,输出格式化的日志信息 |
使用logback
在SpringBoot项目中,导入了spring-boot-starter起步依赖,则默认导入了logback所需的依赖,同样导入spring-boot-starter-web也是如此:

获取日志对象
方法一:
private static final Logger log = LoggerFactory.getLogger(LogbackApplication.class);
javalog.warn("sdadas"); log.info("info..."); log.error("jksabnfijASBF"); log.debug("daskdhaoisjdhja");
注意:使用Logger时导入的包是org.slf4j下的,而不是java.util。
方法二:使用@Slf4j注解:注:该方法在启用前要先启用lombok(SpringBoot内置了lombok)
XML<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
该方法省去了创建对象的麻烦,只需要加上@Slf4j注解,就会自动生成log变量。
日志级别
SpringBoot的日志级别用于控制日志输出的详细程度,日志级别越高,输出的日志越详细。
级别 | 说明 |
---|---|
TRACE | 运行堆栈信息,使用率低 |
DEBUG | 调试时打印关键信息 |
INFO | 普通的打印信息,记录运维过程数据 |
WARN | 警告数据,不影响使用 |
ERROR | 记录错误日志信息 |
FATAL | 致命错误,代码异常导致程序退出的错误 |
控制日志输出级别
可以在springboot的配置文件中设置日志的输出级别:
XML
logging:
level:
root: error

日志输出格式控制
对于单条日志信息来说,日期,触发位置,记录信息是最核心的信息。级别用于做筛选过滤,PID与线程名用于做精准分析。

配置方式
logging: pattern: console: "%logger{36} - %msg%n" #控制台输出格式 file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" #文件输出格式
占位符 | 说明 | 示例输出 |
---|---|---|
%d{yyyy-MM-dd HH:mm:ss} |
日期时间,按照指定的格式输出。yyyy-MM-dd HH:mm:ss 表示年-月-日 时:分:秒。 |
2023-10-05 14:30:45 |
[%thread] |
输出日志的线程名称,放在方括号中。 | [main] |
%-5level |
日志级别,固定宽度为 5 个字符,左对齐。常见的级别有 INFO 、DEBUG 、ERROR 等。 |
INFO (注意后面有一个空格) |
%logger{36} |
日志记录器的名称,最多显示 36 个字符。如果名称超过 36 个字符,会进行截断。 | com.example.MyClass |
- |
一个分隔符,用于分隔日志记录器名称和日志消息。 | - |
%msg |
日志消息内容,即开发者在代码中记录的日志信息。 | This is a log message. |
%n |
换行符,表示日志记录结束并换行。 | (在文件中表现为换行) |
示例:"%d{yyyy-MM-dd HH:mm:ss} %logger{36} - %msg%n"
日志转存
日志不仅能在控制台上显示,还可以存在文件中,方便后续的查阅。
配置方式:设置日志文件名即可
logging:
file:
path: ./logs/ #路径
示例
logging: file: path: ./logs/

注意:不需要手动创建该路径,Springboot程序启动后会自动创建。如果不指定文件名,会自动默认创建在spring.log文件中。如果不修改路径,日志会追加在spring.log文件中。
对于线上复杂的情况,可以对日志文件进行配置:
首先创建一个logback的配置文件:
XML
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds" debug="false">
<!-- 日志路径 部署在服务器 文件夹需要设计777权限 -->
<property name="log.base" value="C://logs/suke"/>
<!--日志存储天数-->
<property name="log.max.days" value="30"/>
<!-- 日志文件大小 -->
<property name="log.max.size" value="500MB"/>
<!-- 输出格式-->
<property name="log.pattern" value="%date{ISO8601} %level [%thread] %logger{56} : %msg%n"/>
<!--字符集-->
<property name="log.charset" value="UTF-8"/>
<!--控制台-附加器 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!--格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>
<!--info-附加器-->
<appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.base}/info/_info.log</file><!--存储路径-->
<!-- 输出格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--按天回滚-->
<fileNamePattern>${log.base}/info/archive/info_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<!--日志最大存储天数-->
<maxHistory>${log.max.days}</maxHistory>
<!--当天的日志 超过大小 压缩日志并保存 -->
<maxFileSize>${log.max.size}</maxFileSize>
</rollingPolicy>
<!--过滤器,只记录INFO级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--warn-附加器-->
<appender name="warnFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.base}/warn/_warn.log</file><!--存储路径-->
<!--输出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.base}/warn/archive/warn_%d{yyyy-MM-dd}.%i.log.zip
</fileNamePattern>
<!--日志最大存储天数-->
<maxHistory>${log.max.days}</maxHistory>
<!-- 当天的日志 超过大小 压缩日志并保存 -->
<maxFileSize>${log.max.size}</maxFileSize>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--error-附加器-->
<appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.base}/error/_error.log</file><!--存储路径 -->
<!--输出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.base}/error/archive/error_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<!--日志最大存储天数-->
<maxHistory>${log.max.days}</maxHistory>
<!-- 当天的日志 超过大小 压缩日志并保存 -->
<maxFileSize>${log.max.size}</maxFileSize>
</rollingPolicy>
<!--级别-过滤器 error-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName -->
<!--<logger name="org.springframework.aop.framework.CglibAopProxy" additivity="false">
<level value="info" />
<appender-ref ref="stdout" />
</logger>-->
<logger name="com.fs" additivity="false">
<level value="debug" />
<appender-ref ref="stdout" />
</logger>
<!-- root将级别为"DEBUG"及大于"DEBUG"的日志信息交给已经配置好的名为"Console"的appender处理,"Console"appender将信息打印到Console -->
<root level="info">
<appender-ref ref="stdout" /> <!-- 标识这个appender将会添加到这个logger -->
<appender-ref ref="infoFile" />
<appender-ref ref="warnFile" />
<appender-ref ref="errorFile" />
</root>
</configuration>
注:Springboot会默认加载classpath:logback-spring.xml或者classpath:logback-spring.groovy或者:classpath:logback.xml,可自定义配置:
XMLlogging: config: classpath:logback-suke.xml
不要使用logback-logback.xml这个来命名,否则spring boot将不能完全实例化