首先在src/main/resource中创建logback-spring.xml文件,一般默认就用此名字,如果更改名字的话就需要在配置文件中进行相关文件路径、名称的配置;文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextName>SpringBoot-Logging</contextName>
<!-- 定义日志文件的存储路径 -->
<property name="ROOT_PATH" value="/root/logs" />
<!-- springprofile可以根据当前活动的配置文件进行日志的配置;适应于多环境配置的情况 -->
<springProfile name="dev">
<!--springProperty允许从application.properties中读取配置 -->
<!-- 如下在application.properties中就要有一个spring.application.name的配置 -->
<springProperty scope="context" name="logName" source="spring.application.name" defaultValue="logging" />
<!-- appender负责写日志的组件;如下为将日志写入到 ConsoleAppender-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder负责两件事,1、把日志信息转换成字节数组;2、把字节数组写入到输出流。 -->
<encoder>
<!--%highlight %boldGreen设置颜色,也可以设置为其他颜色 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %boldGreen(%logger{50}) - %msg%n</pattern>
</encoder>
</appender>
<!-- RollingFileAppender滚动记录日志,先将日志记录到指定文件,符合某一个条件之后,将日志记录到其他文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${ROOT_PATH}/${logName}.log</file>
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责触发滚动【本例中,按照日期进行滚动,每日的日志记录到一个文件中,到第二天时触发滚动,将前一天的文件进行归档】 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--
滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动
%i:当文件大小超过maxFileSize时,按照i进行文件滚动;如:2019-12-06-0.log
-->
<FileNamePattern>${ROOT_PATH}/%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<!--设置日志文件保留天数;此处设置为30天 -->
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--
当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动
注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,
必须配置timeBasedFileNamingAndTriggeringPolicy
-->
<maxFileSize>2000MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 设置输出文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--
格式化输出:%d表示日期,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割
%msg:日志消息,
%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!--
logger主要用于存放日志对象,root的子类,也可以定义日志类型、级别
name:表示匹配的logger类型前缀,也就是包的前半部分
level:要记录的日志级别,包括 TRACE < DEBUG < INFO < WARN < ERROR
additivity:作用在于logger是否使用 root配置的appender以及日志级别进行输出,默认为true;
false:表示只用当前logger的appender-ref,true:
表示当前logger的appender-ref和rootLogger的appender-ref都有效
-->
<logger name="com.learn.controller"/>
<logger name="com.learn.config" level="DEBUG" additivity="false"/>
<!--
root与logger是父子关系,没有特别定义则默认为root,任何一个类只会和一个logger对应,
要么是定义的logger,要么是root,判断的关键在于找到这个logger,然后判断这个logger的appender和level。
-->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</springProfile>
</configuration>
相关的标签的作用以及使用都有相应的注解。
参考博客:https://www.jianshu.com/p/6f093b0b0c8a
https://www.jb51.net/article/171124.htm
SpringBoot工程的结构如下: