摘要:以关闭Spring Boot微服务kafka日志为例,介绍logback日志框架中logger标签的属性。

问题描述

  在Spring Boot整合kafka的时候,日志配置使用 logback.xml,引用中引用了kafka的生产者和消费者。在应用启动后,发现控制台疯狂打印类似如下的kafka日志片段:

// 虽然启动成功后只打印一次,但是,懒婆娘的裹脚——又臭又长
INFO -o.a.k.c.consumer.ConsumerConfig - ConsumerConfig values:
allow.auto.create.topics = true
auto.commit.interval.ms = 5000
auto.offset.reset = latest
...
// 一直刷屏的 Kafka 核心日志片段
[KafkaConsumerDestination{consumerDestinationName='test', partitions=1, dlqName='test'}.container-0-99-1] DEBUG-o.apache.kafka.clients.NetworkClient
[KafkaConsumerDestination{consumerDestinationName='test', partitions=1, dlqName='test'}.container-0-99-1] DEBUG-o.a.k.c.consumer.internals.Fetcher
[KafkaConsumerDestination{consumerDestinationName='test', partitions=1, dlqName='test'}.container-0-99-1] DEBUG-o.a.k.clients.FetchSessionHandler

  导致无法查看正常的其它日志,显而易见,KafkaConsumerDestination等信息是kafka的日志,与业务日志无关。如何关闭这些日志呢?

  解铃还须系铃人,通过分析日志信息,发现它们是由org.apache.kafka.clients.xxx打印的,故使用如下配置提升org.apache.kafka.clients中日志输出级别,问题迎刃而解:

<logger name="org.apache.kafka" level="error"/>

  当然,level可以根据需要修改,也可以选用info或者off。logback.xml 中部分配置代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="false">
<!-- 定义日志文件的存储地址 不要在logback的配置中使用相对路径 -->
<property name="LOG_HOME" value="logs/"></property> <!-- 配置控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<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>
</appender> <!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<maxFileSize>50MB</maxFileSize>
<!-- 日志文件保留天数 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender> <!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
<!-- 定制化某些包的日志输出级别 -->
<logger name="org.apache.kafka" level="warn" additivity="false"/>
<logger name="org.springframework" level="info">
<appender-ref ref="stdout" />
</logger>
</configuration>

如何解决

  只需要在logback.xml文件中加入下面的语句,就可以通过提升kafka的日志打印级别来减少日志打印,避免日志刷屏:

 	<!-- 屏蔽kafka debug,,可以指定为info或者error,使用off可以直接关闭 -->
<logger name="org.apache.kafka.clients" level="warn" additivity="false">/>

  name属性后面的包名可以自由发挥,用于指定想提升日志级别的包名。上述配置起到的作用如下:设置包名 org.apache.kafka.clients 下各个类日志打印级别为 warn,additivity属性为false,表示此loger的打印信息不再向上级传递。

设置logger标签

  logger标签用来设置某一个包或者某一个具体类的日志打印级别,同时可以指定。它包含四个属性:必填的name属性、可选的level、可选的addtivity和可选的appender-ref属性。

  name:指定被设置对象,可以是某一个包,也可以是某一个具体的类。

  level:设置日志打印级别,不区分大小写,日志级别的枚举值包括八个:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。OFF是关闭日志打印的意思。

  addtivity:是否向上级logger传递打印信息,若传递,则同样的日志将被打印多次。默认是true。

  appender-ref:表示这个appender将会添加到这个logger。上述示例并未设置此属性。

结束语

  欢迎点赞阅读,一同学习交流;若有疑问,请在文章下方留下你的神评妙论!以促使博文高质量。

Reference

Spring Boot微服务设置logback日志打印级别并关闭kafka debug日志的更多相关文章

  1. 【原创】Docker容器及Spring Boot微服务应用

    Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复杂问题 传统项目实施过程中经常会出现“程序在我这跑得好好的,在你那怎么就不 ...

  2. 【spring boot】spring cloud下spring boot微服务启动没有报错,但是访问访问不到

    spring cloud下spring boot微服务启动没有报错,但是访问访问不到 解决方法: 可能是端口被占用了,但是依旧启用成功了. 更改一下项目启用的端口号,再重新启动查看是否可以正常访问.

  3. Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警

    Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警 一.添加依赖 1.1 Actuator 的 /prometheus端点 二.Prometheus 配置 部 ...

  4. 基于Centos7.4搭建prometheus+grafana+altertManger监控Spring Boot微服务(docker版)

    目的:给我们项目的微服务应用都加上监控告警.在这之前你需要将 Spring Boot Actuator引入 本章主要介绍 如何集成监控告警系统Prometheus 和图形化界面Grafana 如何自定 ...

  5. Spring Boot微服务架构入门

    概述 还记得在10年毕业实习的时候,当时后台三大框架为主流的后台开发框架成软件行业的标杆,当时对于软件的认识也就是照猫画虎,对于为什么会有这么样的写法,以及这种框架的优势或劣势,是不清楚的,Sprin ...

  6. 在spring boot微服务中使用JWS发布webService

    发布时间:2018-11-22   技术:Java+spring+maven   概述 在springboot微服务中使用JWS发布webService,在服务启动时自动发布webservice接口. ...

  7. Spring Boot微服务框架的搭建

    (1)spring boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

  8. Spring Boot微服务如何集成fescar解决分布式事务问题?

    什么是fescar? 关于fescar的详细介绍,请参阅fescar wiki. 传统的2PC提交协议,会持有一个全局性的锁,所有局部事务预提交成功后一起提交,或有一个局部事务预提交失败后一起回滚,最 ...

  9. spring boot微服务改造冲突

    1.报错: 13:57:49.959 [main] ERROR org.springframework.boot.SpringApplication - Application startup fai ...

  10. Spring Boot微服务电商项目开发实战 --- 基础配置及搭建

    根据SpringBoot实现分布式微服务项目近两年的开发经验,今天决定开始做SpringBoot实现分布式微服务项目的系列文章,帮助其他正在使用或计划使用SringBoot开发的小伙伴们.本次系列文章 ...

随机推荐

  1. 基于标签值分布的强化学习推荐算法(Reinforcement Learning Recommendation Algorithm Based on Label Value Distribution)

    前言 看论文的第三天,坚持下去. 慢慢来,比较快. -- 唐迟 本文基于2023年6月28日发表在MATHEMATICS上的一篇名为"基于标签值分布的强化学习推荐算法"(Reinf ...

  2. 关于JS框架的一点想法

    读了几页<vue.js设计与实现>,记录几点想法: 1.Html是根本 2.无论哪个框架,不管是运行时框架,还是编译时框架,最终都要通过标签"绘制"页面 3.这个&qu ...

  3. go语言实现终端里的倒计时

    最近在更新系统的时候发现pacman的命令行界面变了,我有很久没更新过设备上的Linux系统了,所以啥时候变的不好说.但这一变化成功勾起了我的好奇心.新版的更新进度界面如下: 新的更新进度界面能同时显 ...

  4. Netty源码—1.服务端启动流程

    大纲 1.服务端启动整体流程及关键方法 2.服务端启动的核心步骤 3.创建服务端Channel的源码 4.初始化服务端Channel的源码 5.注册服务端Channel的源码 6.绑定服务端端口的源码 ...

  5. 查看oracle数据库编码格式;ORACLE数据库NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET区别

    查看Oracle数据库字符编码格式得方法,有以下两种,第二种方法有注释,第一种没有Select * from nls_database_parameter;Select * from sys.prop ...

  6. Linux下启动Oracle命令

    1.进入LInux,切换到Oracle用户权限,输入数据库密码.su - oracle    1在这里插入图片描述2.输入sqlplus "/as sysdba"    1在这里插 ...

  7. Delphi Inputbox 输入时显示‘*’号

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  8. [每日算法 - 华为机试] leetcode172. 阶乘后的零

    入口 力扣https://leetcode.cn/problems/factorial-trailing-zeroes/ 题目描述 给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = ...

  9. 【Java】内部类详解

    说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟. 一.内 ...

  10. CoreOS 发行版本介绍

    大多数的软件通常都有什么内测版.公测版什么的. CoreOS 发行版本 而在 CoreOS 中, 有以下3个版本: alpha - α版,音译:阿尔法,俗称尝鲜版,是最新的版本,但是容易出现bug,最 ...