logback.xml配置info日志和error日志分开

本文详细解析了日志框架的配置方法,包括日志输出路径设定、不同级别的日志(如info和error)的处理方式,以及如何通过过滤器和滚动策略实现高效的日志管理和维护。

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

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <!--日志输出路径-->
    <property name="LOG_HOME" value="./logs/test" />
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>
            %d - %msg%n   <!-- 控制台打印日志文件体 时间-信息 -->
        </pattern>
    </layout>
</appender>

<!-- info日志 -->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 过滤日志 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>DENY</onMatch>  <!-- 如果命中就禁止这条日志 -->
        <onMismatch>ACCEPT</onMismatch>  <!-- 如果没有命中就使用这条规则 -->
    </filter>

    <encoder>
        <pattern>
            %msg%n
        </pattern>
    </encoder>
    <!-- 滚动策略 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 设置info日志路径 -->
        <fileNamePattern>${LOG_HOME}/info.%d.log</fileNamePattern>
    </rollingPolicy>
</appender>

<!-- error日志 -->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 过滤日志 -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>ERROR</level>
    </filter>

    <encoder>
        <pattern>
            %msg%n
        </pattern>
    </encoder>
    <!-- 滚动策略 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 设置error日志路径 -->
        <fileNamePattern>${LOG_HOME}/error.%d.log</fileNamePattern>
    </rollingPolicy>
</appender>

<!-- 设置默认日志级别为INFO -->
<root level="info">
    <appender-ref ref="consoleLog"/>
    <appender-ref ref="fileInfoLog"/>
    <appender-ref ref="fileErrorLog"/>
</root>
</configuration>

<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 日志存放路径 --> <property name="log.path" value="D:/rparesource/rparesource/logs/geochance-system" /> <!-- 日志输出格式 --> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />:ss} %-5level ${springAppName:-} %thread %logger %msg%n"/> <!-- 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- 系统日志输出 --> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/info.log</file> <!-- 循环政策:基于时间创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>INFO</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/error.log</file> <!-- 循环政策:基于时间创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>ERROR</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 系统模块日志级别控制 --> <logger name="com.geochance" level="info" /> <!-- Spring日志级别控制 --> <logger name="org.springframework" level="warn" /> <root level="info"> <appender-ref ref="console" /> </root> <!--系统操作日志--> <root level="info"> <appender-ref ref="file_info" /> <appender-ref ref="file_error" /> </root> </configuration> 这是我的日志配置文件,是否符合要求呢
03-25
<think>嗯,用户给了一个LogbackXML配置文件,想确认是否符合要求。首先,我需要仔细看一下这个配置文件的结构各个部分是否正确。 首先,用户声明了XML版本编码,这没问题。根元素是<configuration>,并且设置了scan、scanPerioddebug属性。scan属性设置为true,意味着Logback会自动扫描配置文件的变化,这在生产环境中可能不太推荐,但有时候开发时有用。scanPeriod是60秒,这样每分钟检查一次配置文件是否有更新。debug设置为false,这样不会输出内部的调试信息,是对的,避免日志过大。 接下来是<property>标签,定义了log.pathlog.pattern。log.path指向了D盘的日志目录,这个路径可能存在权限问题,尤其是Linux系统下,但用户可能是Windows环境,所以暂时没问题。log.pattern的格式看起来正确,不过用户后面有一个多余的":ss} %-5level ..."这行,可能是个错误,需要指出。 然后是控制台输出的appender,使用了ConsoleAppender,encoder中的pattern引用了log.pattern,这里没问题。 接下来是文件输出的appender,file_infofile_error都用了RollingFileAppender,基于时间的滚动策略,文件名格式正确,保留60天的日志,这也是合理的。两个appender都用了LevelFilter,分别过滤INFOERROR级别,但注意file_info的过滤是只接受INFO,拒绝其他,而file_error只接受ERROR。不过,通常ERROR级别的appender会用ThresholdFilter,允许ERROR及以上级别的日志,比如ERROR更严重的。不过当前配置可能只记录精确匹配的级别,需要确认用户是否希望INFO appender只记录INFO,而不包括更高级别的WARN、ERROR,这可能有问题,因为通常INFO会包含INFO及以上,除非明确过滤。同样,ERROR的appender可能应该用<level>ERROR</level>加上<onMatch>ACCEPT</onMatch>,而其他情况可能DENY,但这样配置的话,只有ERROR级别的日志会被记录到error.log,而WARN或更高级别的不会,这可能不符合预期。用户可能希望ERROR及以上都记录到error.log,这时候应该用ThresholdFilter,设置level为ERROR,这样所有ERROR及以上的都会被记录。 然后看logger的设置,com.geochance的日志级别是info,org.springframework是warn,这没问题。但root logger被定义了两次,第一次是<root level="info">,引用console,然后后面又有一个<root level="info">,引用了file_infofile_error。这在Logback中是不允许的,因为只能有一个root logger。用户可能在这里犯了错误,导致配置无效,第二个root会覆盖第一个,或者解析错误。正确的做法应该是在同一个root元素中包含所有需要的appender-ref。 此外,在第一个root中只引用了console,第二个root引用了file_infofile_error,这会导致控制台只输出到console,而文件日志可能被第二个root覆盖,或者合并,但实际Logback不允许多个root元素,必须只有一个。所以这是一个错误,需要修正,把两个appender-ref合并到一个root里。 还有,在log.pattern的定义中,用户可能不小心多了一行内容,导致pattern可能不正确,需要检查。 总结问题点: 1. 存在两个root元素,必须合并。 2. LevelFilter可能不合适,应该用ThresholdFilter来正确捕获ERROR及以上。 3. log.pattern属性可能存在语法错误,多余的内容。 4. 文件路径可能存在系统兼容性问题。 5. 是否需要将不同级别的日志分开存储,比如INFOERROR分开,但通常ERROR会包含更高优先级,所以可能需要调整过滤器。 用户可能需要合并root,修正log.pattern,调整过滤器类型,并检查文件路径是否正确。</think>您提供的Logback配置文件整体结构有效,但存在几个需要优化的地方。以下分点说明: $\textcolor{red}{⚠️ 存在问题}$: 1. $\textcolor{red}{重复的根日志记录器}$ XML中出现两个$\texttt{<root>}$节点,Logback只允许存在一个。后出现的$\texttt{<root>}$会覆盖前者,导致控制台输出失效 2. $\textcolor{red}{日志格式语法错误}$ $\texttt{<property name="log.pattern">}$的第二行`:ss} %-5level...`是冗余内容,会导致实际日志输出格式异常 3. $\textcolor{red}{级别过滤策略待优化}$ - INFO日志应使用$\texttt{ThresholdFilter}$记录INFO及以上级别 - ERROR日志建议保留默认的层级继承关系(ERROR及以上) $\textcolor{green}{✓ 正确配置部分}$: ```xml <!-- ✅ 时间滚动策略正确 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>60</maxHistory> </rollingPolicy> <!-- ✅ 包路径级别控制有效 --> <logger name="com.geochance" level="info" /> <logger name="org.springframework" level="warn" /> ``` $\textcolor{blue}{🛠 修改建议}$: 1. 合并根日志配置: ```xml <root level="info"> <appender-ref ref="console" /> <appender-ref ref="file_info" /> <appender-ref ref="file_error" /> </root> ``` 2. 修正日志格式属性: ```xml <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> ``` 3. 优化过滤器配置: ```xml <!-- INFO日志记录INFO及以上级别 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <!-- ERROR日志记录ERROR及以上级别 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> ``` $\textcolor{orange}{🔍 其他注意事项}$: 1. Windows路径$\texttt{D:/rparesource/...}$在Linux部署时需要修改 2. 开启$\texttt{scan="true"}$时,生产环境建议设置更长扫描间隔(如10分钟) 3. 建议为不同级别日志设置不同的文件命名规则,例如增加级别标识 修改后的完整配置示例: https://gist.github.com/logback-example/(虚拟示例链接,实际使用时请按上述建议修改)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值