springboot启动不打印日志信息_springboot项目大量打印debug日志问题

本文探讨了SpringBoot项目在启动时遇到的打印大量DEBUG日志的问题。问题源于war包中同时存在logback、log4j和slf4j-log4j12,导致logback作为默认实现按debug级别输出日志。解决方案是移除spring-boot-starter-web中的logback依赖,确保日志系统按预期配置工作。
摘要由CSDN通过智能技术生成

目前,java下应用最广泛的日志系统主要就是两个系列: log4j和slf4j+logback 。

其中,slf4j只包含日志的接口,logback只包括日志的具体实现,两者加起来才是一个完整的日志系统。Log4j则同时包含了日志接口和实现。

这两套日志系统之间有可以相互兼容的组件,分别是slf4j-log4j12和 log4j-over-slf4j,引入之后就可以用log4j打出slf4j接口的日志,或者用logback打出log4j接口的日志。

背景知识介绍到这里,再简单说一下标题里提到的问题。问题的现象就是我们在war包里配置了log4j的日志级别为info, 但在catalina里却一直在打大量的debug日志。初看现象肯定很诡异,前期各种研究tomcat配置也没什么头绪。直到磁盘压力太大,去看jstack发现大量进程是等待在Logback代码中,才发现之前关注错了重点。再去具体了解了java下的日志系统后,问题也就很明了了。

先把几个事实摆出来:

1. 打出的debug日志都是用slf4j写的,根据堆栈得知logback具体执行了日志打印

2. logback在无配置文件时默认debug级别

3. 我们的war包中同时包含logback,log4j和slf4j-log4j12

4. Slf4j无法主动选择具体的日志实现

想必看到这里,大家也明白了问题所在。根据我们引入的包,log4j和logback都可以实现打印slf4j日志,而具体谁来打,不是一个用正常办法可以控制的事情,在这个具体案例下,logback就成了具体的日志打印者。而因为我们其实是想用lo4j打日志,所以没有配logback配置,所以logback就按默认的debug级别打了大量日志。

解决办法也很简单,就是把logback的包全去掉。看似有些暴力,但确实是最合理的一个解决办法。

查看依赖,发现spring-boot-starter-web包含了logback依赖包,将其移除即可。

org.springframework.boot

spring-boot-starter-web

logback-classic

ch.qos.logback

logback-core

ch.qos.logback

com.alibaba

fastjson

1.2.29

dom4j

dom4j

1.6.1

org.apache.activemq

activemq-core

5.7.0

log4j

log4j

1.2.12

org.slf4j

slf4j-api

1.7.26

org.slf4j

slf4j-log4j12

1.7.26

log4j

log4j

最后提供一个排查日志问题的通用套路,免得找不到方向乱看。

1. 找几行不符合自己日志配置的具体日志,翻阅对应代码,看看是哪个日志接口打的

2. 查jar包,看看这套日志框架有哪些具体实现

3. 把多的jar包去掉

Springboot + SLF4j + Log4j2 打印异常日志时,耗时要5-6秒

1.使用jps -l 查看springboot项目的进程ID 2.使用命令jstack -l 进程ID > log.txt 打印堆栈信息到文件,内容如下: "http-nio-8065 ...

SpringBoot中Mybatis打印sql日志

application.yml中加上 # springBoot+Mybatis 控制台打印SQL语句 (方式一) logging: level: com.zoctan.api.mapper : deb ...

iOS打印Debug日志的方式

简单介绍以下几个宏: 1) __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的作用在于,当可变参 ...

Swift打印Debug日志,实现Release下不打印

OC内,我们往往做log打印时,会考虑一个Debug环境下打印,Release下控制不打印,以节约性能消耗. OC我们可以这样做: 在pch文件内,定义如下: //打印日志 #ifdef DEBUG ...

php 打印debug日志

A lesser known trick is that mod_php maps stderr to the Apache log. And, there is a stream for that, ...

03篇ELK日志系统——升级版集群之ELK日志系统整合springboot项目

[ 前言:整个ELK日志系统已经搭建好了,接下来的流程就是: springboot项目中的logback日志配置通过tcp传输,把springboot项目中所有日志数据传到————>logsta ...

SpringBoot项目的几种创建方式,启动、和访问

最常用的4种方式,但除了这些以外,还有其他方式: ①在线创建 ②STS构建 ③Intell  Idea内置构建工具 ④Maven创建 STS官网:https://start.spring.io  .S ...

Springboot项目启动不了。也不打印任何日志信息。

Springboot项目启动不了.也不打印任何日志信息. 世界空间 模型变换:每个模型经过模型变换来 ...

go log repl

package main import ( "fmt" "os/exec" "regexp" "strconv" &qu ...

QUEEN_BLADE_2D-非常屌-113P

http://www.cgvoo.com/thread-33670-1-2.html http://blog.sina.com.cn/s/blog_4b92d6070102e7gj.html http ...

Eclipse项目内存溢出解决方案

方法一: 打开eclipse,选择Window--Preferences...在对话框左边的树上双击Java,再双击Installed JREs,在右边选择前面有对勾的JRE,再单击右边的“Edit” ...

Git-常用命令集合

该文章会陆续添加内容,学习网页来自http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 ...

Qt读取文件时中文乱码问题

在默认情况下,Qt 以 Unicode 格式处理文本字符,因此,字符本身是不会有问题的.之所以出现乱码,原因在于 Qt 不知道将 Unicode 字符以何种方式显示出来.        文本文件含有简 ...

Https 安全传输的原理

序言 今天来聊一聊https 安全传输的原理. 在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖(怎么又是你?!), 还有一个是位于米国的Bill (怎么还是你?!). 这俩哥们隔着千山万水, ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值