返回顶部
首页 > 资讯 > 精选 >如何使用logback实现日志打印过滤
  • 273
分享到

如何使用logback实现日志打印过滤

2023-06-20 18:06:37 273人浏览 八月长安
摘要

这篇文章主要为大家展示了“如何使用logback实现日志打印过滤”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用logback实现日志打印过滤”这篇文章吧。logback日志打印过滤1.只

这篇文章主要为大家展示了“如何使用logback实现日志打印过滤”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用logback实现日志打印过滤”这篇文章吧。

logback日志打印过滤

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

<?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 接口的实例能监听 logger context 上发生的事件,比如说日志级别的变化 -->    <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:”的日志内容。

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的数据,msg,等等等等,可以用java对日志进行自定义的判断,过滤不需要的过滤器,对日志内容进行替换等等,随心所欲。

<?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>            <!-- 控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,            且<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的值为空的日志内容,所以所有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>

以上是“如何使用logback实现日志打印过滤”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何使用logback实现日志打印过滤

本文链接: https://lsjlt.com/news/298998.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用logback实现日志打印过滤
    这篇文章主要为大家展示了“如何使用logback实现日志打印过滤”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用logback实现日志打印过滤”这篇文章吧。logback日志打印过滤1.只...
    99+
    2023-06-20
  • 使用logback实现日志打印过滤
    logback日志打印过滤 1.只打印sql语句以及参数 <?xml version="1.0" encoding="UTF-8" ?> <co...
    99+
    2024-04-02
  • Springboot如何使用Logback实现日志配置
    这篇文章主要讲解了“Springboot如何使用Logback实现日志配置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Springboot如何使用Logback实现日志配置”吧!概述默认情...
    99+
    2023-07-04
  • log4j2如何使用filter过滤日志
    小编给大家分享一下log4j2如何使用filter过滤日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!背景说明log4j2作为log4j的升级版本,其性能自然是...
    99+
    2023-06-22
  • Android --- logcat 打印日志、设置缓存大小、过滤等
    一、示例: setprop persist.log.tag -G setprop persist.log.tag Vsetprop persist.log.tag Ssetprop persist.log.tag.APP_A Vsetpr...
    99+
    2023-09-02
    logcat 打印日志 设置缓存大小 过滤关键字 Powered by 金山文档
  • 使用logback实现按自己的需求打印日志到自定义的文件里
    目录1、工具类 LoggerUtils2、枚举类 LogFileName3、logger.xml, 按需配置即可 定义工具类-创建对应的日志对象 定义枚举类-存储定义...
    99+
    2024-04-02
  • SpringMVC框架中如何使用Filter实现请求日志打印
    这篇文章主要为大家展示了“SpringMVC框架中如何使用Filter实现请求日志打印”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringMVC框架中如何使用Filter实现请求日志打印”...
    99+
    2023-06-25
  • spring boot使用logback日志级别打印控制操作得示例
    小编给大家分享一下spring boot使用logback日志级别打印控制操作得示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!因为公司业务需要,需要把性能日志...
    99+
    2023-06-06
  • springboot实现打印彩色日志
    springboot打印彩色日志 logback配置 <?xml version="1.0" encoding="UTF-8"?> <confi...
    99+
    2024-04-02
  • java通过AOP实现全局日志打印详解
    目录几个常用的切点注解,这次使用了@Before和@Around切Controller打印请求的接口、参数、返回值以及耗时情况。切Service打印日志,URL,请求方式,IP,类名...
    99+
    2024-04-02
  • dubbo 如何使用logback来输出日志
    dubbo logback输出日志 两者皆为国内使用比较广的两个开源框架:一个是服务治理框架,另一个则是日志框架。这个问题的解决方案一部分就在dubbo官网上: dubbo的日志适配...
    99+
    2024-04-02
  • java日志打印怎么使用
    本篇内容介绍了“java日志打印怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、简介日志打印是java代码开发中不可缺少的重要一步...
    99+
    2023-06-26
  • 在Spring Boot中使用slf4j与logback如何实现配置日志
    这期内容当中小编将会给大家带来有关在Spring Boot中使用slf4j与logback如何实现配置日志,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。spring boot主要的目的是:为 Spring...
    99+
    2023-05-31
    springboot slf4j logback
  • Go实现整合Logrus实现日志打印
    目录1 初步使用2 增加标签WithFields3 配置常见参数4 输出日志到文件5 利用Hooks将日志输出到其他地方Github:github.com/sirupsen/lo&h...
    99+
    2024-04-02
  • log4j2使用filter过滤日志方式
    目录背景说明Filter.Result的三种过滤结果log4j2提供的过滤器(功能简述)Filter的作用范围常用过滤器使用示例(文字版代码见文末链接)StringMatchFilt...
    99+
    2024-04-02
  • springboot怎么实现打印彩色日志
    这篇文章主要为大家展示了“springboot怎么实现打印彩色日志”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“springboot怎么实现打印彩色日志”这篇文章吧。springboot打印彩色...
    99+
    2023-06-20
  • python中如何打印日志信息
    日志打印方式 常见的Python日志打印方式为使用内置函数print()或者logging模块打印日志。 print()只能将日志打印至控制台,不推荐此方式logging模块默认将日志打印至控制台,也...
    99+
    2023-09-05
    python
  • idea如何打印全部的日志
    要打印全部的日志,可以参考以下方法: 设置日志级别:将日志级别设置为最低级别(如DEBUG),确保所有日志信息都会被记录。 ...
    99+
    2023-10-25
    idea
  • 使用java注解和aspectj AOP怎么实现打印日志
    本篇文章给大家分享的是有关使用java注解和aspectj AOP怎么实现打印日志,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先需要自定义注解:systemName:表示该...
    99+
    2023-06-06
  • java如何实现统一打印入参出参等日志
    这篇文章主要介绍“java如何实现统一打印入参出参等日志”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java如何实现统一打印入参出参等日志”文章能帮助大家解决问题。1.背景   ...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作