Logback日志配置(分级别输出到不同文件)

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">

	<!-- 关联配置文件 -->
	<property resource="application.yml"/>
    <!--设置保存地址变量-->
	<springProperty scope="context" name="log.path" source="art.log.path"/>

	<!-- 设置日志格式 -->
	<property name="CONSOLE_LOG_PATTERN"
			  value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
	<!-- 设置日志依赖的渲染类,设置日志字体颜色 -->
	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
	<conversionRule conversionWord="wex"
					converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
	<conversionRule conversionWord="wEx"
					converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
	<!-- Console log output -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<!-- 输出到debug -->
	<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!--文件保存地址-->
		<file>${log.path}/debug.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!--日志文件输出的文件名-->
			<fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
			<!--日志文件最大的大小-->
			<maxFileSize>50MB</maxFileSize>
			<!--日志文件保留天数-->
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder>
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
			<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>DEBUG</level>
		</filter>
	</appender>

	<!-- 输出到error -->
	<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${log.path}/error.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!--日志文件输出的文件名-->
			<fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
			<!--日志文件最大的大小-->
			<maxFileSize>50MB</maxFileSize>
			<!--日志文件保留天数-->
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder>
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
			<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 只打印ERROR日志 -->
			<level>ERROR</level>
		</filter>
	</appender>

	<logger name="com.gorun.platform.art" level="DEBUG"/>
	<logger name="org.springframework.scheduling.quartz" level="ERROR"/>


	<logger name="com.dstz.base.dao" level="DEBUG"/>
	<logger name="com.dstz.bpm.core.dao" level="DEBUG"/>
	<logger name="com.dstz.bpm.plugin.core.dao" level="DEBUG"/>
	<logger name="com.dstz.bus.dao" level="DEBUG"/>
	<logger name="com.dstz.form.dao" level="DEBUG"/>
	<logger name="com.dstz.org.core.dao" level="DEBUG"/>
	<logger name="com.dstz.sys.core.dao" level="DEBUG"/>
	<logger name="org.springframework.jdbc.core" level="DEBUG"/>

	<!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
	<!--分别设置对应的日志输出节点 -->
	<root level="INFO">
		<appender-ref ref="console"/>
		<appender-ref ref="debug"/>
		<appender-ref ref="error"/>
	</root>
</configuration>

<think>好的,用户的问题是关于如何根据Spring Boot的active profile配置不同Logback日志输出。我需要结合提供的引用内容来解答这个问题。 首先,用户提到的根据active profile来调整日志配置,这在引用[4]中有提到Spring profile多环境配置Logback的例子。引用[4]中的配置文件使用了`<springProfile>`标签,这应该是关键点。同时,引用[3]指出,如果使用logback-spring.xml而不是logback.xml,可以在配置中使用Spring的profile功能,因为Spring Boot会自动识别logback-spring.xml并处理其中的Spring扩展。 接下来,我需要确定如何结构配置文件。根据引用[4],可以在logback-spring.xml中使用不同的`<springProfile>`块来区不同环境。例如,开发环境可能输出到控制台并使用更详细的日志级别,而生产环境则输出文件并限制日志级别为INFO。 另外,引用[5]提到了排除jar包冲突的问题,这可能影响日志输出,所以在配置时需要确保依赖正确。但用户当前的问题主要是配置不同环境的日志,所以这部可能暂时不需要深入,但可以作为一个注意事项提及。 用户可能需要一个具体的示例,展示如何在不同profile下配置不同的appender和日志级别。例如,在dev环境下使用CONSOLE输出DEBUG级别,而在prod环境下使用FILE输出INFO级别,并且按天滚动日志文件。 还需要注意,根据引用[2],默认情况下,Spring Boot使用Logback,但复杂配置需要自定义logback-spring.xml。因此,建议用户创建这个文件,并在其中使用条件化配置。 最后,验证部需要指导用户如何设置active profile,并检查日志输出是否符合预期。例如,通过启动命令指定--spring.profiles.active=dev,或者通过application.properties设置。 总结步骤:创建logback-spring.xml,使用<springProfile>标签定义不同环境的配置,设置不同的appender和日志级别,排除可能的依赖冲突,测试不同profile下的日志行为。</think>根据Spring Profile动态配置Logback日志的解决方案如下: ### 配置步骤 1. **创建`logback-spring.xml`配置文件** ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 公共属性 --> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/> <property name="LOG_PATH" value="./logs"/> <!-- 开发环境配置 --> <springProfile name="dev"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="CONSOLE"/> </root> </springProfile> <!-- 生产环境配置 --> <springProfile name="prod"> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="FILE"/> </root> </springProfile> </configuration> ``` ### 关键配置说明 1. **`<springProfile>`标签**:通过name属性指定profile名称,实现环境隔离配置[^4] 2. **日志级别控制**: - 开发环境(dev)开启DEBUG级别 - 生产环境(prod)限制为INFO级别 3. **输出目标差异**: - 开发环境仅输出到控制台 - 生产环境使用滚动文件日志(保留30天)[^4] ### 验证方式 1. 启动时指定profile: ```bash java -jar app.jar --spring.profiles.active=dev ``` 2. 在application.properties设置: ```properties spring.profiles.active=prod ``` ### 注意事项 1. 必须使用`logback-spring.xml`文件名才能支持Spring扩展功能[^3] 2. 确保排除冲突的日志依赖(如log4j)[^5] 3. 支持多profile组合: ```xml <springProfile name="dev,test"> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值