springboot+logback日志配置

本文详细介绍如何在SpringBoot项目中自定义logback日志配置,包括配置文件详解、日志级别设定、日志文件滚动策略及过滤器使用。通过实际代码演示,展示如何将不同级别的日志输出到不同的文件,以及如何在控制台和文件中输出日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于springboot默认支持logback日志,我们可以在application.properties配置文件里直接配置,也可以在resources目录下面添加自己的日志配置文件。这里,我们使用的是在resources目录下面添加自己定义的logback.xml文件。

 

一、工程目录

 

二、源码文件

(1)logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!-- ============================================================================================== -->
<!-- 《说明》 -->
<!-- 1、configuration 中 debug="true" 属性配置表示输出logback本身状态信息,当不需要时,可以去除此配置 -->
<!-- 2、自动重新加载配置:configuration 元素的 scan 属性为 true,当发生变化后进行重新配置,开发时建议用 -->
<!-- =============================================================================================== -->
<configuration scan="false" scanPeriod="60 seconds" debug="false">
	
	<!-- 日志基准目录,相对于Tomcat,也可定义绝对目录 -->
	<property name="log.base" value="${user.dir}/logs" />
	<property name="log.app" value="${log.base}/app" />
	<property name="log.other" value="${log.base}/other" />

	<jmxConfigurator />

	<!-- 标准、缺省日志输出 把日志输出到控制台 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
		</encoder>
	</appender>
	
	<appender name="WEB" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志文件名 -->
		<file>${log.app}/web/web.log</file>
        <!-- 过滤器,只记录INFO级别的日志 -->
        <!-- 如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 设置过滤级别 -->
		    <level>INFO</level>
            <!-- 用于配置符合过滤条件的操作 -->
		    <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合过滤条件的操作 -->
		    <onMismatch>DENY</onMismatch>   
		</filter>
        <!-- 根据时间和文件大小来制定的滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 文件命名模式 -->
			<fileNamePattern>${log.app}/web/web-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日志文件保留天数为30天,30天之前都会被删除-->
		    <maxHistory>30</maxHistory>
            <!-- 最大20MB 超过最大值,会重新建一个文件-->
			<maxFileSize>20MB</maxFileSize>
            <!-- 日志总保存量为10GB -->
			<totalSizeCap>10GB</totalSizeCap>
		</rollingPolicy>
        <!-- 设置日志内容输出格式 -->
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
		</encoder>
	</appender>

	<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.other}/debug/debug.log</file>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${log.other}/debug/debug-%d{yyyy-MM-dd}.%i.log
			</fileNamePattern>
			<maxHistory>30</maxHistory>
			<maxFileSize>20MB</maxFileSize>
			<totalSizeCap>10GB</totalSizeCap>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
		</encoder>
	</appender>

	<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.other}/info/info.log</file>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${log.other}/info/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
			<maxHistory>30</maxHistory>
			<maxFileSize>20MB</maxFileSize>
			<totalSizeCap>10GB</totalSizeCap>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
		</encoder>
	</appender>

	<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.other}/warn/warn.log</file>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>WARN</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${log.other}/warn/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
			<maxHistory>30</maxHistory>
			<maxFileSize>20MB</maxFileSize>
			<totalSizeCap>10GB</totalSizeCap>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
		</encoder>
	</appender>

	<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.other}/error/error.log</file>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${log.other}/error/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
			<maxHistory>30</maxHistory>
			<maxFileSize>20MB</maxFileSize>
			<totalSizeCap>10GB</totalSizeCap>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
		</encoder>
	</appender>

	<!-- 全局日志级别及输出方案 -->
	<root level="DEBUG">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="DEBUG" />
		<appender-ref ref="INFO" />
		<appender-ref ref="WARN" />
		<appender-ref ref="ERROR" />
	</root>
</configuration>

 

(2)测试类

@RestController
@RequestMapping("/logback")
public class LogbackController {

    private static Logger logger = LoggerFactory.getLogger(LogbackController.class);

    @RequestMapping("/hello")
    public Map<String, Object> hello(HttpServletRequest request) {
        logger.debug("程序开始啦~~~~");
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("hello", "Hello world!!!");
        logger.debug("程序结束!!!");
        return resultMap;
    }

}

 

三、运行结果

控制台输出:

 

日志文件夹中:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值