logback-spring自定义日志配置

本文详细描述了如何在SpringBoot项目中使用logback-spring.xml配置文件,包括设置日志级别、SpringProperty读取配置、ConsoleAppender和RollingFileAppender的使用以及ERROR和DEBUG日志的独立处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置文件命名为logback-spring.xml。

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

    <!--用springProperty来配置的话,可以直接读取properties文件-->
    <!--    <springProperty scope="context" name="LOG-DIR" source="${log.dir}"/>-->
    <springProperty name="LOG-DIR" source="log.path"/>
    <springProperty name="APP-NAME" source="log.name"/>
    <property name="LOG-PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] [%-5level] [%class:%line] - %m%n"/>

    <!--控制台-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--<charset>UTF-8</charset>-->
            <pattern>${LOG-PATTERN}</pattern>
        </encoder>
    </appender>

    <!--日志文件-->
    <appender name="FILE-ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式,把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>${LOG-DIR}/${APP-NAME}/${APP-NAME}-%d{yyyyMMdd}.log</FileNamePattern>
            <!--只保留最近10天的日志-->
            <maxHistory>10</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <!--<totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>
        <!--日志输出编码格式化-->
        <encoder>
            <!--<charset>UTF-8</charset>-->
            <pattern>${LOG-PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- ERROR日志文件 -->
    <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--过滤 ERROR-->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>${LOG-DIR}/${APP-NAME}/${APP-NAME}-error-%d{yyyyMMdd}.log</FileNamePattern>
            <!--只保留最近7天的日志-->
            <maxHistory>7</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <!--<totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>
        <!--日志输出编码格式化-->
        <encoder>
            <!--<charset>UTF-8</charset>-->
            <pattern>${LOG-PATTERN}</pattern>
        </encoder>
    </appender>

    <!--wf日志-->
    <logger name="org.snaker.engine" level="DEBUG"/>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE-ALL"/>
        <appender-ref ref="FILE-ERROR"/>
    </root>

    <!--<logger name="com.jjld.coupon.repository" level="DEBUG"/>-->
    <!--<logger name="com.jjld.coupon.com.infoview.third.mapper" level="DEBUG"/>-->

</configuration>

程序启动会生成error类和all两类日志文件。

### 问题分析 在 Spring Boot 项目中,`logback-spring.xml` 是用于配置日志的核心文件。然而,在 Linux 环境下,如果该配置文件未生效,可能涉及多个原因,包括路径问题、启动参数设置不当或文件内容错误等。 以下将详细分析可能的原因及解决方案,并结合提供的引用信息进行说明。 --- ### 可能原因及解决方案 #### 1. **路径问题** 如果 `logback-spring.xml` 文件未被正确加载,可能是由于路径配置不正确导致的。Spring Boot 默认会在类路径(classpath)中查找 `logback-spring.xml` 文件。如果文件不在类路径中,则需要通过命令行参数显式指定其位置[^4]。 **解决方案**: - 确保 `logback-spring.xml` 文件位于项目的 `resources` 目录下,这样它会被打包到 JAR 文件中。 - 如果文件位于外部目录,则需要通过启动参数指定其路径: ```bash nohup java -jar your-app.jar --logging.config=/path/to/logback-spring.xml & ``` 注意:上述命令中的路径必须是绝对路径。 #### 2. **启动参数未正确传递** 在某些情况下,启动参数可能未正确传递给 JVM,导致 Spring Boot 无法识别自定义日志配置文件。 **解决方案**: - 检查启动脚本是否正确传递了 `--logging.config` 参数。 - 如果使用的是 `nohup` 或其他后台运行方式,请确保参数没有被截断或遗漏。 - 示例: ```bash nohup java -jar your-app.jar --logging.config=/home/java/your-app/logback-spring.xml & ``` #### 3. **文件内容错误** 如果 `logback-spring.xml` 文件本身存在语法错误或配置不当,也可能导致其未生效。 **解决方案**: - 检查 `logback-spring.xml` 文件的内容是否符合 Logback 的规范。例如,以下是一个基本的配置示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/var/log/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/var/log/app.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="FILE" /> </root> </configuration> ``` - 确保文件中的路径(如 `<file>` 标签中的路径)在 Linux 系统中是有效的,并且具有写入权限[^3]。 #### 4. **权限问题** 在 Linux 系统中,文件和目录的权限可能会导致日志无法正常写入。 **解决方案**: - 检查日志文件所在目录的权限,确保应用程序有足够的权限写入日志文件。 - 使用以下命令检查并修改权限: ```bash ls -l /var/log/ chmod 755 /var/log/ chown your-user:your-group /var/log/ ``` #### 5. **Spring Boot 默认行为** Spring Boot 提供了两种日志配置文件:`logback.xml` 和 `logback-spring.xml`。其中,`logback-spring.xml` 允许更灵活的配置,例如可以使用 Spring 的占位符 `${}`[^1]。 **解决方案**: - 确保文件命名为 `logback-spring.xml` 而不是 `logback.xml`,否则 Spring Boot 不会应用 Spring 特定的功能。 - 如果需要使用环境变量或属性文件中的值,确保正确配置了 `application.properties` 或 `application.yml` 中的相关属性。 --- ### 总结 `logback-spring.xml` 在 Linux 环境下未生效的原因可能包括路径问题、启动参数未正确传递、文件内容错误、权限问题以及 Spring Boot 的默认行为。针对这些问题,可以通过调整文件路径、检查启动参数、验证文件内容、调整权限以及确保正确使用 `logback-spring.xml` 来解决。 --- ### 示例代码 以下是一个完整的 `logback-spring.xml` 配置示例,按日期归档日志[^3]: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/var/log/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/var/log/app.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="ROLLING" /> </root> </configuration> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值