欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用logback實現(xiàn)日志打印過濾

 更新時間:2021年07月29日 08:57:52   作者:食火的埃爾德里奇  
這篇文章主要介紹了使用logback實現(xiàn)日志打印過濾的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

logback日志打印過濾

1.只打印sql語句以及參數(shù)

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 設置 logger context 名稱,一旦設置不可改變,默認為default -->
    <!-- <contextName>myAppName</contextName> -->
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss" />
    <!-- 日志文件大小最大值 -->
    <property name="maxFileSize" value="1kb" />
    <!-- LoggerContextListener 接口的實例能監(jiān)聽 logger context 上發(fā)生的事件,比如說日志級別的變化 -->
    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
        <resetJUL>true</resetJUL>
    </contextListener>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
            by default -->
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
                <expression>return message.contains("mapper") || message.contains("component") || message.contains("MapperFactoryBean");</expression>
            </evaluator>
            <OnMismatch>NEUTRAL</OnMismatch>
            <OnMatch>DENY</OnMatch>
        </filter>
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
                <expression>return message.contains("Preparing") || message.contains("Parameters:") || message.contains("Total:");</expression>
            </evaluator>
            <OnMismatch>DENY</OnMismatch>
            <OnMatch>ACCEPT</OnMatch>
        </filter>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>
    <logger name="java.sql.Statement" level="DEBUG" />
    <logger name="java.sql.PreparedStatement" level="DEBUG" />
    <logger name="com.xxx" level="debug" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>
    <root>
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

上面有兩個過濾器,

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

第二個過濾器是只打印包含字符串”Preparing”,”Paramters:”,”Total:”的日志內(nèi)容。

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<ILoggingEvent> {
    @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<ILoggingEvent>,在變量event中可以取到mdc的數(shù)據(jù),msg,等等等等,可以用java對日志進行自定義的判斷,過濾不需要的過濾器,對日志內(nèi)容進行替換等等,隨心所欲。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--控制臺日志-->
    <appender name="consoleApp" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            </pattern>
        </layout>
    </appender>
    <!--ERROR級別日志-->
    <appender name="fileErrorApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            </pattern>
        </encoder>
        <!-- 設置滾動策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 路徑 -->
            <fileNamePattern>log/app.err.%d.log</fileNamePattern>
            <!-- 控制保留的歸檔文件的最大數(shù)量,超出數(shù)量就刪除舊文件,假設設置每個月滾動,
            且<maxHistory> 是1,則只保存最近1個月的文件,刪除之前的舊文件 -->
            <MaxHistory>1</MaxHistory>
        </rollingPolicy>
    </appender>
    <!--INFO級別日志-->
    <appender name="fileInfoApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <!–
                onMatch="ACCEPT" 表示匹配該級別及以上
                onMatch="DENY" 表示不匹配該級別及以上
                onMatch="NEUTRAL" 表示該級別及以上的,由下一個filter處理,如果當前是最后一個,則表示匹配該級別及以上
                onMismatch="ACCEPT" 表示匹配該級別以下
                onMismatch="NEUTRAL" 表示該級別及以下的,由下一個filter處理,如果當前是最后一個,則不匹配該級別以下的
                onMismatch="DENY" 表示不匹配該級別以下的
            –>
            <onMatch>ACCEPT</onMatch>
            <!–<onMismatch>DENY</onMismatch>–>
        </filter>-->
        <filter class="com.filter.SimpleLogFilter"/>  <!--我寫的過濾器,過濾的是mdc中name的值為空的日志內(nèi)容,所以所有name為空值的不會被打印-->
        <encoder>
            <pattern>
                %X{name} %X{age} %X{like}-----%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
            </pattern>
        </encoder>
        <!-- 滾動策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 路徑 -->
            <fileNamePattern>log/app.info.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>
    <!--root level最低級別-->
    <root level="INFO">
        <appender-ref ref="consoleApp"/>
        <appender-ref ref="fileInfoApp"/>
        <appender-ref ref="fileErrorApp"/>
    </root>
</configuration>

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Mybatis的dao層,service層的封裝方式

    Mybatis的dao層,service層的封裝方式

    這篇文章主要介紹了Mybatis的dao層,service層的封裝方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 利用java制作簡單的音樂播放器

    利用java制作簡單的音樂播放器

    這篇文章主要為大家詳細介紹了利用java的swing技術制作簡單的音樂播放器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 六個Java集合使用時需要注意的事項

    六個Java集合使用時需要注意的事項

    這篇文章主要為大家詳細介紹了六個Java集合使用時需要注意的事項,文中的示例代碼講解詳細,對我們學習java有一定的幫助,需要的可以參考一下
    2023-01-01
  • 詳解Java8?StreamAPI中的map()方法

    詳解Java8?StreamAPI中的map()方法

    Stream?API?是Java8中新加入的功能,這篇文章主要帶大家了解一下?Stream?API?中的?map()?方法的使用,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-04-04
  • SpringBoot集成Redis的實現(xiàn)示例

    SpringBoot集成Redis的實現(xiàn)示例

    這篇文章主要介紹了SpringBoot集成Redis的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java 回調(diào)函數(shù)深入理解

    Java 回調(diào)函數(shù)深入理解

    這篇文章主要介紹了 Java 回調(diào)函數(shù)深入理解的相關資料,需要的朋友可以參考下
    2017-03-03
  • IDEA創(chuàng)建方法時如何快速添加注釋

    IDEA創(chuàng)建方法時如何快速添加注釋

    這篇文章主要介紹了IDEA創(chuàng)建方法時如何快速添加注釋問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • IDEA2020.1使用LeetCode插件運行并調(diào)試本地樣例的方法詳解

    IDEA2020.1使用LeetCode插件運行并調(diào)試本地樣例的方法詳解

    這篇文章主要介紹了IDEA2020.1使用LeetCode插件運行并調(diào)試本地樣例的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-09-09
  • Spring?AOP概念及原理解析

    Spring?AOP概念及原理解析

    這篇文章主要介紹了Spring?AOP概念及原理?,通過使用?Spring?AOP?實現(xiàn)日志管理,我們可以將日志記錄的邏輯從業(yè)務邏輯中分離出來,簡化了代碼的維護,需要的朋友可以參考下
    2024-07-07
  • Java線程運行的原理詳解

    Java線程運行的原理詳解

    這篇文章主要為大家詳細介紹了Java線程運行的原理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評論