logback.xml

Appender: 中添加自定义的filter

    <!--MIlESTONE 按照每天生成日志文件 -->
    <appender name="PROCESS_MILESTONE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 添加自定义的过滤一些类的logger -->
        <filter class="com.sea.elsa.subscribe.milestone.filter.FilterSyncLogger" />
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名  每天一归档-->
            <fileNamePattern>${LOG_HOME}/${LOG_PREFIX}/${LOG_PREFIX}-process-%d{yyyyMMdd}.log.%i
            </fileNamePattern>
            <!--日志文件保留天数 -->
            <maxFileSize>100MB</maxFileSize>
            <MaxHistory></MaxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
                %msg%n</pattern>
        </encoder>
        <!-- 设置过滤级别 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <!-- Safely log to the same file from multiple JVMs. Degrades performance! -->
        <prudent>false</prudent>
    </appender>

 

 

 // 指定不同包下输入到不同的日志文件中

    <logger name="com.sea.elsa.subscribe.milestone.listener.canal"
        level="info" additivity="false">
        <appender-ref ref="SYNC_MILESTONE_LOG" />
    </logger>
    <!-- 日志输出级别 -->
    <!-- <root level="DEBUG"> -->
    <root level="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="PROCESS_MILESTONE_LOG" />
    </root>

 //指定 单个 class 打印到单独文件 ( root 中不用追加,否则会重复打印)

  <!-- 日志输出级别  -->
    <root level="info">
        <appender-ref ref="INFO_FILE" />
    </root>
    //指定单个类
    <logger name="com.sea.gateway.filter.LogRequestPathRecordFilter">
        level="info" additivity="false">
        <appender-ref ref="REQUEST_PATH_RECORD" />
    </logger>

 

 

自定义filter 

package com.sea.elsa.subscribe.milestone.filter;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;

public class FilterSyncLogger extends Filter<ILoggingEvent> {
     
    @Override
    public FilterReply decide(ILoggingEvent event) {
      //也可以直接指定类名   event.getLoggerName().equals("com.sea.test")
        if (getPackName(event.getLoggerName()).equals("com.example.bootstart.log") //指定包名
                ||getPackName(event.getLoggerName()).equals("com.example.bootstart.log2"))
        {
            return FilterReply.ACCEPT;
        } else{
            return FilterReply.DENY;
        }
    }
 
    public String getPackName(String className){
        String packName = className.substring(0,className.lastIndexOf("."));
        return packName;
    }
 
}

 

 

 

 

posted on 2019-08-23 15:22  lshan  阅读(1086)  评论(0编辑  收藏  举报