如何配置 logback 将单独的包记录到单独的日志文件中?

How to configure logback to log separate packages into separate log files?

我的日志必须根据包分成单独的文件。所以,Spring异常要写入spring.log,DAO异常要写入dao.log,服务异常要写入service.log,ApacheTomcat要写入server.log .

此时只有spring.log正在写入。 我该如何解决这个问题,以便写入所有四个日志文件?

<configuration scan="true">

    <appender name="daoLog"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/dao.log</file>
        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="serviceLog"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/service.log</file>

        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="springLog"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/spring.log</file>

        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="serverLog"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/server.log</file>

        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <logger name="com.example.dao">
        <appender-ref ref="daoLog" />
    </logger>

    <logger name="com.example.service">
        <appender-ref ref="serviceLog" />
    </logger>

    <logger name="org.springframework">
        <appender-ref ref="springLog" />
    </logger>

    <logger name="org.apache.tomcat">
        <appender-ref ref="serverLog" />
    </logger>

</configuration>

您的配置看起来是正确的。问题可能出在您记录消息的地方。唯一缺少的部分是日志级别,如果您不声明它,则默认为 info 级别。您需要确保从您的代码中以正确的级别记录它。