You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:35:52