一、问题是怎么发现的

最近有个 Java 系统上线后不久就收到了磁盘使用率告警,磁盘使用率已经超过了 90% 以上,并且磁盘使用率还在不停增长。

二、问题带来的影响

由于服务器磁盘被打满,导致了系统正常的业务日志无法继续打印,严重影响了系统的可靠性。

三、排查问题的详细过程

刚开始收到磁盘告警的时候,怀疑是日志级别问题,业务日志输出过多导致磁盘打满。但是查看我们自己的业务日志文件目录,每个日志文件内容都不是很大。

于是通过堡垒机登陆问题服务器,查看磁盘使用率很高的目录列表,发现根目录有个很大的日志文件,日志文件名称为 log4j.log。但是检查应用日志配置后,日志输出配置路径并没有配置这个日志路径。而且我们用的是 logback 日志组件和配置文件,并没有使用 log4j 来输出日志。于是便打开这个未知来源的日志文件内容,记录的日志内容确实是我们自己的 java 系统写入的日志内容,且大部分都是 debug 级别日志内容。于是猜测在系统依赖的 jar 包内也有一个 log4j 的日志配置文件。于是便把部署包下载下来,然后通过文档遍历扫描所有 jar 包内的日志配置文件,结果在一个第三方 jar 包内找到一个 log4j.xml 配置文件,里边配置的 root 日志级别为 debug,日志输出目录是系统根目录,日志文件名也都可以对应的上。

四、如何解决问题

通过上述排查过程找到了第三方 jar 包内的 log4j 配置文件,于是便排查该 jar 包的来源,发现是被其他 jar 包传递依赖进来的,并不是我们真实需要的 jar 包,所以通过 maven 排除该问题 jar 包即可。

五、总结反思

1. 以后在引入第三方 jar 包的时候一定要检查他的依赖范围,看是否会与现有系统的 jar 包有冲突或者带来其他的影响。

2. 对外提供第三方 jar 包的时候,不要把自己的调试代码和日志配置测试文件也打入 jar 包内。

作者:京东零售 曹志飞

来源:京东云开发者社区

Log4j疯狂写日志问题排查的更多相关文章

  1. Log4j写日志文件使用详解

    Log4j输出到控制台成功,写入文件失败 - Log4j和commons log的整合 一.今天在使用commongs-logging.jar和log4j.properties来输出系统日志的时候,发 ...

  2. 排查log4j不输出日志到文件的问题

    问题描述 项目使用Spring Boot框架,在pom文件中添加了如下配置: <dependency> <groupId>org.slf4j</groupId> & ...

  3. 使用log4j无法输出日志

    前段时间在项目的过程中使用log4j来输出日志,但是在一个项目里我明明已经在src/main/resource目录下创建了log4j.properties.具体配置如下: log4j.rootLogg ...

  4. Java进阶(五十二)利用LOG4J生成服务日志

    Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...

  5. springmvc整合slf4j、log4j记录文本日志

    一.配置pom.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3 ...

  6. Flume学习应用:Java写日志数据到MongoDB

    概述 Windows平台:Java写日志到Flume,Flume最终把日志写到MongoDB. 系统环境 操作系统:win7 64 JDK:1.6.0_43 资源下载 Maven:3.3.3下载.安装 ...

  7. aspnetcore进程内托管的坑-非常规方法解决Log4Net不写日志的问题

    问题描述:Log4Net,本地测试一切正常,发布后,无法自动创建文件夹和日志文件,无法写入文件. 一.在项目中配置Log4Net 请参考我的上一篇博客 <aspnetcore配置log4net并 ...

  8. ActiveMQ学习总结(6)——ActiveMQ集成Spring和Log4j实现异步日志

    我的团队和我正在创建一个由一组RESTful JSON服务组成的服务平台,该平台中的每个服务在平台中的作用就是分别提供一些独特的功能和/或数据.由于平台中产生的日志四散各处,所以我们想,要是能将这些日 ...

  9. log4j托管tomcat日志

    由于项目中 Tomcat 日志越来越大,对于日志查找非常不方便,所以经过一番调查可以通过log4j来托管 Tomcat 日志的方式,实现Tomcat日志切片.这里只说明怎么是log4j托管Tomcat ...

  10. SSM框架中添加写日志功能

    前提:要导入log4j的jar包 在web.xml中输入: <!--日志加载--> <context-param> <param-name>log4jConfigL ...

随机推荐

  1. 2020-09-26:请问rust中的&和c++中的&有哪些区别?

    福哥答案2020-09-26:#福大大架构师每日一题# 变量定义:c++是别名.rust是指针.取地址和按位与,c++和rust是相同的. c++测试代码如下: #include <iostre ...

  2. 2022-04-26:给定四个整数 sx , sy ,tx 和 ty,如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty),则返回 true,否则返回 false。 从点 (x

    2022-04-26:给定四个整数 sx , sy ,tx 和 ty,如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty),则返回 true,否则返回 false. 从点 (x ...

  3. 2021-10-18:乘积最大子数组。给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。力扣152。

    2021-10-18:乘积最大子数组.给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积.力扣152. 福大大 答案2021-1 ...

  4. python环境的安装与设置和oneforall的安装与使用

    下载python: https://www.python.org/downloads/windows/ 安装python 如果不需要修改路径,下面两个√打开后,点击上面的install now 也可以 ...

  5. es 笔记二之基础查询

    本文首发于公众号:Hunter后端 原文链接:es笔记二之基础查询 这一篇笔记介绍 es 的基础查询. 基础查询包括很多,比如排序,类似数据库 limit 的操作,like 操作,与或非等,对于这些操 ...

  6. Visual Studio2019打开电脑摄像头

    #include<iostream> //opencv头文件 #include<opencv2/opencv.hpp> using namespace std; using n ...

  7. 二次封装Element UI Table实现动态列

    开发中是否会遇见在一个页面中加载的table的列是不固定的,列名需要根据后台数据而动态加载:so element ui 的table 已经不再满足需求,我们得在他的基础上再次封装 增加 refacto ...

  8. APP调用第三方(微信)登录(最详细的实现流程)

    最近使用weexplus做了个app 用户需要的是可以使用第三方微信实现登录(虽然网上有很多相关的什么申请开发者账户.appid.openid等资料:但是都是讲的中间的那一部分请原谅我是个菜鸟,脑补开 ...

  9. 《Generative Adversarial Nets》论文精读

    论文精读<Generative Adversarial Nets> 导言:生成模型是目前爆火的一个研究方向,据Microsoft对于ChatGPT-4的研究称"ChatGPT-4 ...

  10. Golang 协程/线程/进程 区别以及 GMP 详解

    Golang 协程/线程/进程 区别详解 转载请注明来源:https://janrs.com/mffp 概念 进程 每个进程都有自己的独立内存空间,拥有自己独立的地址空间.独立的堆和栈,既不共享堆,亦 ...