logback多文件配置经典说明实例

半兽人 发表于: 2016-10-20   最后更新时间: 2021-10-09 23:52:41  
{{totalSubscript}} 订阅, 9,237 游览

对于生产环境,项目日志分离至关重要,分享我们的配置,附上logback,并说明解释。

1、设置变量配置

### Logback Configuration started  ###
logger.name=holiday
logger.logLevel=INFO
logger.outside.logLevel=INFO
logger.logRoot=/data/log
### Logback Configuration finished  ###

2、设置生产的 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- error 级别日志文件 -->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${logger.logRoot}/${logger.name}-error.log</File>
        <encoder>
            <Pattern>[%date] [%-5level] %c{40} %line --%mdc{client} [%X{TRACE_LOG_ID}] %msg%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logger.logRoot}/${logger.name}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>512MB</maxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 普通日志文件,排除错误日志 -->
    <appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${logger.logRoot}/${logger.name}.log</File>
        <encoder>
            <Pattern>[%date] [%-5level] %c{40} %line --%mdc{client} [%X{TRACE_LOG_ID}] %msg%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logger.logRoot}/${logger.name}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>512MB</maxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>

    <!-- 外部jar包 日志级别设置 -->
    <logger level="${logger.outside.logLevel}" name="com.ibatis" />
    <logger level="${logger.outside.logLevel}" name="com.mchange" />
    <logger level="${logger.outside.logLevel}" name="com.mangofactory"/>
    <logger level="${logger.outside.logLevel}" name="java.sql"/>
    <logger level="${logger.outside.logLevel}" name="ch.qos.logback"/>
    <logger level="${logger.outside.logLevel}" name="com.alibaba"/>
    <logger level="${logger.outside.logLevel}" name="org"/>
    <logger level="${logger.outside.logLevel}" name="jndi"/>
    <logger level="${logger.outside.logLevel}" name="org.jdbcdslog"/>
    <logger level="${logger.logLevel}"         name="com.system"/>

    <!-- 输出到文件 -->
    <logger level="${logger.logLevel}" name="com.test.project" additivity="false">
        <!-- 去除错误日志 -->
        <appender-ref ref="logfile"/>
        <!-- 只打印错误日志 -->
        <appender-ref ref="error"/>
    </logger>

    <root level="${logger.logLevel}">
        <!-- 默认不输出 -->
    </root>
</configuration>

注意:日志会输出2份:项目名.log项目名-error.log,错误日志到后者查询。

<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>ERROR</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
</filter>

这段代码的意思是,只接收 ERROR 的错误。logfile则除了 ERROR 级别 的日志。

  • additivity="false" 是否向上传递,意思就是说我输出完了,就不往下传递让别人输出了。

  • logger设置指定包com.test.project内容,输出对2个文件中。

  • logger和root的关系,简单来说,就是logger级别高于root,root是默认的,logger没配置的时候,就会找默认的root了。

  • root我们这里不输出,目的是不希望有其他类的日志被采集到。

更新于 2021-10-09

追风少年 4年前

logfile 和error的filter配置一样了,是否需要修正一下

半兽人 -> 追风少年 4年前

容我看看

半兽人 -> 追风少年 4年前

有差异的,你在仔细看看。

查看java更多相关的文章或提一个关于java的问题,也可以与我们一起分享文章