使用logback实现日志打印过滤

logback日志打印过滤

1.只打印sql语句以及参数



    
    
    
    
    
    
    
        true
    
    
        
        
             
                return message.contains("mapper") || message.contains("component") || message.contains("MapperFactoryBean");
            
            NEUTRAL
            DENY
        
        
             
                return message.contains("Preparing") || message.contains("Parameters:") || message.contains("Total:");
            
            DENY
            ACCEPT
        
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            
        
    
    
    
    
        
    
    
        
    

上面有两个过滤器,

其中第一个过滤器是过滤掉所有包含字符串“mapper”,“component”,“MapperFactoryBean”的日志打印

第二个过滤器是只打印包含字符串”Preparing”,”Paramters:”,”Total:”的日志内容。

logback.xml日志文件过滤器配置简析

自定义过滤器

java代码,目的是在mdc中放值,然后在日志中打印

package com.controller;
import com.pojo.JsonData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(path = "/api/log/")
public class LoggerController {
    Logger logger= LoggerFactory.getLogger(getClass());
    @RequestMapping(path = "test1")
    public Object logTest1(){
        logger.trace("-----trace级别日志-----");
        logger.debug("-----debug级别日志-----");
        logger.info("-----info级别日志-----");
        logger.warn("-----warn级别日志-----");
        logger.error("-----error级别日志-----");
        return JsonData.buildSuccess();
    }
    @RequestMapping(path = "test2")
    public Object logTest2(){
        MDC.put("name","yangche");
        MDC.put("age","25");
        MDC.put("like","wujing");
        logger.trace("-----trace级别日志-----");
        logger.debug("-----debug级别日志-----");
        logger.info("-----info级别日志-----");
        logger.warn("-----warn级别日志-----");
        logger.error("-----error级别日志-----");
        logger.info("");
        MDC.clear();
        return JsonData.buildSuccess();
    }
}

写一个过滤器

package com.filter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
import org.springframework.util.StringUtils;
public class SimpleLogFilter extends Filter {
    @Override
    public FilterReply decide(ILoggingEvent event) {
        System.err.println(event.getMDCPropertyMap().get("name"));
        if(StringUtils.isEmpty(event.getMdc().get("name"))){
            return FilterReply.DENY;
        }else {
            return FilterReply.NEUTRAL;
        }
    }
}

以上过滤器要继承Filter,在变量event中可以取到mdc的数据,msg,等等等等,可以用java对日志进行自定义的判断,过滤不需要的过滤器,对日志内容进行替换等等,随心所欲。



    
    
        
            
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            
        
    
    
    
        
            ERROR
        
        
            
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            
        
        
        
            
            log/app.err.%d.log
            
            1
        
    
    
    
        
          
        
            
                %X{name} %X{age} %X{like}-----%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            
        
        
        
            
            log/app.info.%d.log
        
    
    
    
        
        
        
    

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

你可能感兴趣的:(使用logback实现日志打印过滤)