一、问题是怎么发现的

最近有个 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. values() 字典形式显示查询结果

    values() 字典形式显示查询结果 name,age为数据库的两个列 Student.objects.values('name','age')

  2. weex 中出现 loading无法关闭

    如题使用weex 搞个app 一安装就有一个bug 一直这里转!!! 找了半天原来是自己没按规定来,在index.vue中直接使用了rower <template> <router- ...

  3. 代码随想录算法训练营Day30 回溯算法| 332.重新安排行程 51. N皇后 37. 解数独 总结

    代码随想录算法训练营 332.重新安排行程 题目链接:332.重新安排行程 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划 ...

  4. ClickHouse进阶|如何自研一款企业级高性能网关组件?

    使用原生ClickHouse集群进行节点数据查询和写入时,离不开第三方开源网关组件chproxy支持.但由于chproxy缺少TCP协议支持,导致性能.查询能力等受限.这也成为困扰众多ClickHou ...

  5. 7-9 《Fibonacci 数列》

    7-9 <Fibonacci 数列> 思路:吃过前面<序列求和>问题的亏 但还是要尝试一下循环大法 Fn=Fn-1+Fn-2 定义int型 aFn-1 , bFn-2 , cF ...

  6. SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBoot jar包中

    SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBoot jar包中 转载 首先我们应该知道我们把SPRINGBOOT项目打包成WAR包和 ...

  7. python学习框架

    Python简介与安装 Python的历史与特点 Python的安装与配置 Python基础语法 变量与数据类型 运算符与表达式 控制结构(条件判断与循环) 函数与模块 错误处理与异常 Python数 ...

  8. 【Clickhouse】ReplaceingMergeTree引擎final实现合并去重探索

    前言 在OLAP实践中,在有数据更新的场景中,比如存储订单数据,我们经常会用到ReplaceingMergeTree引擎来去重数据,以获取数据的最新状态.但是ReplaceingMergeTree引擎 ...

  9. 关于Java已死,看看国外开发者怎么说的

    博主在浏览 medium 社区时,发现了一篇点赞量 1.5k 的文章,名称叫<Java is Dead - 5 Misconceptions of developers that still t ...

  10. python台历代码--涉及知识点为Excel表格合并等操作

    from openpyxl.styles import Alignment, PatternFill, Fontfrom openpyxl.utils import get_column_letter ...