如何在logback-spring.xml中配置多位置日志输出?
Logback多位置生成日志实现方案
问题原因
你当前的配置错误在于单个RollingFileAppender下重复定义了<file>标签,Logback在解析时只会读取最后一个<file>配置,因此只有application.log生效,自定义路径的配置被覆盖。
正确实现方式
要生成多位置日志,需要为每个目标路径创建独立的RollingFileAppender,然后将所有appender关联到日志根节点。
修改后的完整配置
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="30 seconds"> <property name="springAppName" value="app-name"/> <springProperty name="maxLogHistoryInDays" source="log.maxLogHistoryInDays"/> <springProperty name="logPath" source="log.path"/> <!-- 控制台输出Appender --> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <charset>UTF-8</charset> <pattern>%d{dd MMM yyyy ;HH:mm:ss.SSS} %highlight(%level) [%thread] %property{HOSTNAME} ${springAppName:-} [%X{X-B3-TraceId}] %logger{0}.%M\(%line\) - %msg%n </pattern> </encoder> </appender> <!-- 自定义路径日志Appender --> <appender name="customPathFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${logPath}/${springAppName}/application.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${logPath}/${springAppName}/application_%d{yyyy-MM-dd}_%i.log</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>${maxLogHistoryInDays}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{dd MMM yyyy ;HH:mm:ss.SSS} %level [%thread] %property{HOSTNAME} ${springAppName:-} [%X{X-B3-TraceId}] %logger{0}.%M\(%line\) - %msg%n</pattern> </encoder> </appender> <!-- 默认路径日志Appender --> <appender name="defaultPathFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>application.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>application_%d{yyyy-MM-dd}_%i.log</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>${maxLogHistoryInDays}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{dd MMM yyyy ;HH:mm:ss.SSS} %level [%thread] %property{HOSTNAME} ${springAppName:-} [%X{X-B3-TraceId}] %logger{0}.%M\(%line\) - %msg%n</pattern> </encoder> </appender> <!-- 根日志节点,关联所有需要的Appender --> <root level="INFO"> <appender-ref ref="consoleAppender" /> <appender-ref ref="customPathFileAppender" /> <appender-ref ref="defaultPathFileAppender" /> </root> </configuration>
关键说明
- 每个日志路径对应一个独立的
RollingFileAppender,通过不同名称区分(如customPathFileAppender和defaultPathFileAppender) - 每个Appender的
fileNamePattern要匹配对应路径,确保滚动生成的日志文件也会保存到目标目录 - 根节点
<root>同时引用两个文件Appender,日志就会同时输出到两个指定位置
内容的提问来源于stack exchange,提问作者nee nee
相关产品推荐
相关产品推荐

