学习笔记--logback filter使用

logbak日志级别TRACE < DEBUG < INFO < WARN < ERROR

<?xml version="1.0" encoding="UTF-8"?>
<configuration scanPeriod="60 seconds" debug="false">
    <property resource="application.properties" />
    <property name="logging.path" value="${logging.path}" />
    <!-- 控制台输出 -->
    <appender name="console-appender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[%d] [%p] [%C{0}.%M{0}] - %m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="root-appender" 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>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${logging.path}/demo/root.log.%d{yyyy-MM-dd}</FileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[%d] [%p] [%C{0}.%M{0}] - %m%n</pattern>
        </encoder>
    </appender>

    <!--指定日志的保存点-->
    <!--滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件-->
    <appender name="controller-appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动&ndash;&gt;-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${logging.path}/demo/controller.log.%d{yyyy-MM-dd}</FileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[%d] [%p] [%C{0}.%M{0}] - %m%n</pattern>
        </encoder>
    </appender>
    <appender name="service-appender" 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>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${logging.path}/demo/service.log.%d{yyyy-MM-dd}</FileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[%d] [%p] [%C{0}.%M{0}] - %m%n</pattern>
        </encoder>
    </appender>

    <appender name="dao-appender" 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>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${logging.path}/demo/dao.log.%d{yyyy-MM-dd}</FileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[%d] [%p] [%C{0}.%M{0}] - %m%n</pattern>
        </encoder>
    </appender>
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>    <!--打印此级别的日志--!>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${logging.path}/demo/error.log.%d{yyyy-MM-dd}</FileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[%d] [%p] [%C{0}.%M{0}] - %m%n</pattern>
        </encoder>
    </appender>

    <!--指定日志的输出点(controller包中)-->
    <logger name="com.edu.controller" level="INFO" additivity="true">
        <appender-ref ref="controller-appender"/>
    </logger>

    <logger name="com.edu.service" level="INFO" additivity="false">
        <appender-ref ref="service-appender"/>
    </logger>
    <!--dao层日志-->
    <logger name="com.edu.dao" level="INFO" additivity="false">
        <appender-ref ref="dao-appender"/>
    </logger>
   
    <logger name="java.sql" level="DEBUG" additivity="false">
        <appender-ref ref="dao-appender"/>
    </logger>

    <root level="INFO">
        <appender-ref ref="console-appender" />
        <appender-ref ref="root-appender" />
        <appender-ref ref="ERROR" />
    </root>

</configuration>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>ERROR</level>
    <onMatch>DENY</onMatch>//默认为NEUTRAL
    <onMismatch>ACCEPT</onMismatch>//默认为NEUTRAL
</filter>

表示:(deny)拒绝error级别的日志。

public class LevelFilter extends AbstractMatcherFilter<ILoggingEvent> {
    Level level;

    public LevelFilter() {
    }

    public FilterReply decide(ILoggingEvent event) {
        if (!this.isStarted()) {
            return FilterReply.NEUTRAL;
        } else {
            //比对设置的level与在行的日志level。
            return event.getLevel().equals(this.level) ? this.onMatch : this.onMismatch;
        }
    }

    public void setLevel(Level level) {
        this.level = level;
    }

    public void start() {
        if (this.level != null) {
            super.start();
        }

    }
}
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>ERROR</level>
</filter>

表示:打印级别>=level的日志

public class ThresholdFilter extends Filter<ILoggingEvent> {
    Level level;

    public ThresholdFilter() {
    }

    public FilterReply decide(ILoggingEvent event) {
        if (!this.isStarted()) {
            return FilterReply.NEUTRAL;
        } else {
            //比对当前在行日志与设置的level级别,打印>=level级别的日志
            return event.getLevel().isGreaterOrEqual(this.level) ? FilterReply.NEUTRAL : FilterReply.DENY;
        }
    }

    public void setLevel(String level) {
        this.level = Level.toLevel(level);
    }

    public void start() {
        if (this.level != null) {
            super.start();
        }

    }
    public boolean isGreaterOrEqual(Level r) {
        return this.levelInt >= r.levelInt;
    }
}

具体属性解释参考:https://www.cnblogs.com/warking/p/5710303.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值