【Logback】Spring boot 配置多环境的logback

一、背景描述

由于MAC环境本地启动项目存在目前权限问题,需要与测试环境不一致只,为了不每次修改代码都修改本地目录,则想配置日志目录的多环境支持

二、实现方案

1、application-local.yml配置

复制代码
logging:
    config: classpath:logback-spring.xml
    # 根据自己springboot版本配置,ruoyi是2.5.15
    file:
        path: /Users/marion/data

2、ruoyi配置logback-spring.xml

在 Logback 配置文件中,您可以使用 <statusListener> 元素来打印 Logback 变量的值。

以下是一个示例,在该示例中,我们通过配置一个 <statusListener> 元素来将 Logback 变量打印到控制台:

在上述示例中,我们使用 class 属性指定了 ch.qos.logback.core.status.OnConsoleStatusListener 类作为状态监听器。这个状态监听器会在启动时将日志输出到控制台,并包括 Logback 变量的值。

当您运行应用程序时,请确保查看应用程序的日志输出。您应该能够看到 Logback 变量的值以及其他启动期间的日志信息。

另外,如果您只想打印特定的变量,而不是所有变量,您可以自定义一个状态监听器,并重写 addStatusEvent() 方法来控制打印的变量。

请注意,运行时打印的变量值仅在应用程序启动时才可见。如果您希望在应用程序运行时动态访问 Logback 变量的值,您需要编写代码来获取和处理这些值。

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--打印 Logback 变量的值-->
    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />

    <springProperty scope="context" name="logPath" source="logging.file.path"/>
    <!-- 日志存放路径 -->
	<property name="log.path" value="${logPath}/logs/ruoyi/logs" />
    <!-- 日志输出格式 -->
	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

	<!-- 控制台输出 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>

	<!-- 系统日志输出 -->
	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/sys-info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
	</appender>

	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/sys-error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
			<!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
			<!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

	<!-- 用户访问日志输出  -->
    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.path}/sys-user.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天回滚 daily -->
            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

	<!-- 系统模块日志级别控制  -->
	<logger name="com.ruoyi" level="info" />
	<!-- Spring日志级别控制  -->
	<logger name="org.springframework" level="warn" />

	<root level="info">
		<appender-ref ref="console" />
	</root>

	<!--系统操作日志-->
    <root level="info">
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    </root>

	<!--系统用户操作日志-->
    <logger name="sys-user" level="info">
        <appender-ref ref="sys-user"/>
    </logger>
</configuration>

参考资料

Spring boot 配置多环境的logback_logback多环境配置_哲学是个什么东东的博客-CSDN博客

相关推荐
撸猫7912 小时前
HttpSession 的运行原理
前端·后端·cookie·httpsession
嘵奇2 小时前
Spring Boot中HTTP连接池的配置与优化实践
spring boot·后端·http
子燕若水3 小时前
Flask 调试的时候进入main函数两次
后端·python·flask
程序员爱钓鱼3 小时前
跳转语句:break、continue、goto -《Go语言实战指南》
开发语言·后端·golang·go1.19
Persistence___4 小时前
SpringBoot中的拦截器
java·spring boot·后端
嘵奇4 小时前
Spring Boot 跨域问题全解:原理、解决方案与最佳实践
java·spring boot·后端
堕落年代4 小时前
SpringBoot的单体和分布式的任务架构
spring boot·分布式·架构
码农飞哥5 小时前
互联网大厂Java求职面试实战:Spring Boot与微服务场景深度解析
java·数据库·spring boot·安全·微服务·消息队列·互联网医疗
景天科技苑5 小时前
【Rust泛型】Rust泛型使用详解与应用场景
开发语言·后端·rust·泛型·rust泛型
I_itaiit6 小时前
Spring Boot之Web服务器的启动流程分析
spring boot·nettywebserver·httphandler·webhandler