对于springboot项目,在resources中新建logback.xml或logback-spring.xml文件,将以下代码复制进去,根据需求稍作修改或删除即可。
<?xml version="1.0" encoding="UTF-8" ?>
<!--内容借鉴:https://blog.csdn.net/anyeyeyeyeye/article/details/132598358-->
<!--文件命名为logback.xml或logback-spring.xml,建议logback-spring.xml-->
<!--
属性 可选值 说明 备注
scan true|false 开启扫描,配置变更时logback自动更新配置 默认空,即false
scanPeriod 30 (|milli(second)?|second(e)?|minute|hour|day)s? 扫描间隔: 数字 + 空格 + 日期单位 默认一分钟,若不指定时间单位,默认毫秒
debug true|false 注册OnConsoleStatusListener的简写模式,控制台输出logback内部日志 默认false
packagingData true|false 每行日志都输出包信息其所在jar包信息 对性能影响较大,1.1.4及以上版本默认false
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false" packingData="false">
<!--
在配置文件中配置:
#单个日志最大大小
size_max=500MB
#日志保存天数
days_max=365
-->
<!-- <springProperty name="size_max" source="size_max"/>-->
<!-- <springProperty name="days_max" source="days_max"/>-->
<!--
变量定义:低版本可以通过<property> 来定义,1.0.7版本后可以通过<variable>等同于<property>,二者一样
使用: ${变量名}
指定默认值:以:- 分隔 ${name:-value}
使用下面方式可以不使用在上面配置文件中配置,二选一
-->
<!-- windows 日志存储目录-->
<property name="logback.logDir" value=".\logs"/>
<!--linux 日志存储目录-->
<!--<property name="logback.logDir" value="${user.dir}/../logs"/>-->
<!--单个日志文件最大大小-->
<property name="size_max" value="500MB"/>
<!--日志保存天数-->
<property name="days_max" value="50"/>
<!--字符集-->
<property name="charset" value="UTF-8"/>
<!--日志最大容量-->
<property name="totalSizeCap" value="1GB"/>
<!-- 分隔符 -->
<!--<property name="separator" value="‖"/>-->
<!-- 设置日志格式,由于默认配置使log文件出现空格乱码现象,在此文件log使用CONSOLE_LOG_PATTERN_FILES配置方式 -->
<!--<property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS}${separator}%-5level${separator}${serverName}${separator}${PID}${separator}${HOSTNAME}${separator}%X{requestId}${separator}%-25logger{20}${separator}%-4line${separator}%msg%n"/>-->
<property name="CONSOLE_LOG_PATTERN_FILES" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<!-- 引入spring-boot默认的logback配置文件,通过引入的方式,获取原生控制台的日志颜色 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--控制台输出日志设置-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--encoder:指定输出日志格式化和字符集-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${charset}</charset>
</encoder>
</appender>
<!--输出到日志滚动文件-->
<!--FileAppender将日志事件追加到指定日志文件中-->
<!--使用RollingFileAppender,继承继承自FileAppender,支持日志分片和历史日志的自动删除-->
<!--
RollingFileAppender执行流程:
1、日志始终追加写入指定的日志文件中,若文件不存在则自动创建
2、按rollingPolicy配置的策略,当满足策略时,自动将file重命名为rollingPolicy中指定的归档日志文件名,生成历史归档日志,如 /temp/test.2023-04-12.log,并对归档日志进行压缩 和 过期日志删除。
3、循环 1-2
-->
<!--所有级别日志单独存储一份 -->
<appender name="logback" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志文件的路径-->
<File>${logback.logDir}/logback.log</File>
<!--append:true | false,是否以追加的方式写到日志文件,默认true-->
<append>true</append>
<!--encoder:指定输出日志格式化和字符集-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN_FILES}</pattern>
<charset>${charset}</charset>
</encoder>
<!--prudent:安全模式,性能较差,一般不开启,默认false-->
<prudent>false</prudent>
<!--滚动(归档)策略, TimeBasedRollingPolicy:按照时间滚动(归档),超出指定时间范围的日志自动删除;
SizeAndTimeBasedRollingPolicy:按时间和文件大小滚动(归档)
-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中-->
<FileNamePattern>${logback.logDir}/arch/logback/logback.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志保留时长(天)-->
<maxHistory>${days_max}</maxHistory>
<!--单个日志文件最大容量-->
<maxFileSize>${size_max}</maxFileSize>
<!--maxHistory内日志最大容量,到了这个值,就会删除旧的日志-->
<!-- <totalSizeCap>${totalSizeCap}</totalSizeCap>-->
<!--cleanHistoryOnStart:项目启动时是否清理归档日志,默认false-->
<cleanHistoryOnStart>false</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<!--将info日志单独存储一份 -->
<appender name="infoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">java
<!--过滤器,过滤满足条件或者不满足条件的日志
LevelFilter:级别过滤器,匹配指定的日志级别
ThresholdFilter:阈值过滤器,匹配等于或高于指定级别的日志
-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${logback.logDir}/info.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${logback.logDir}/arch/info/info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!-- 单个日志文件最多 100MB -->
<maxFileSize>${size_max}</maxFileSize>
<!--只保留最近30天的日志-->
<maxHistory>${days_max}</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>${totalSizeCap}</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN_FILES}</pattern>
<charset>${charset}</charset>
</encoder>
</appender>
<!--将warn日志单独存储一份 -->
<appender name="warnLog" class="ch.qos.logback.core.rolling.RollingFileAppender">java
<!--过滤器,过滤满足条件或者不满足条件的日志
LevelFilter:级别过滤器,匹配指定的日志级别
ThresholdFilter:阈值过滤器,匹配等于或高于指定级别的日志
-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>WARN</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${logback.logDir}/warn.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${logback.logDir}/arch/warn/warn.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!-- 单个日志文件最多 100MB -->
<maxFileSize>${size_max}</maxFileSize>
<!--只保留最近30天的日志-->
<maxHistory>${days_max}</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>${totalSizeCap}</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN_FILES}</pattern>
<charset>${charset}</charset>
</encoder>
</appender>
<!--将error日志单独存储一份 -->
<appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">java
<!--过滤器,过滤满足条件或者不满足条件的日志
LevelFilter:级别过滤器,匹配指定的日志级别
ThresholdFilter:阈值过滤器,匹配等于或高于指定级别的日志
-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${logback.logDir}/error.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${logback.logDir}/arch/error/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!-- 单个日志文件最多 100MB -->
<maxFileSize>${size_max}</maxFileSize>
<!--只保留最近30天的日志-->
<maxHistory>${days_max}</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>${totalSizeCap}</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN_FILES}</pattern>
<charset>${charset}</charset>
</encoder>
</appender>
<!--使用<logger>标签指定com.sw.controller包内的日志在控制台输出的级别为warn-->
<!--配置additivity="false",否则<root>中也配置了<appender-ref ref="console"/>,会重复输出日志。-->
<!-- <logger name="com.sw.controller" level="warn" additivity="false">-->
<!-- <appender-ref ref="console"/>-->
<!-- </logger>-->
<!--建议在<root>中引用所有<appender>-->
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="logback"/>
<appender-ref ref="infoLog"/>
<appender-ref ref="warnLog"/>
<appender-ref ref="errorLog"/>
</root>
</configuration>
撰文参考:https://blog.csdn.net/anyeyeyeyeye/article/details/132598358