多进程使用同一log4j配置导致的日志丢失与覆盖问题
最近接手了一个流传很多手的魔性古早代码,追日志时发现有明显缺失。对log4j不熟,不过可以猜测日志出问题肯定和多进程使用同一个log4j配置有关。经多次排查,终于捋清了其中逻辑。本文对排查过程进行复盘。
一、表征
|<----------------- A ------------------- ......
|<- B ->| |<--- B --->| |<- B ->|
二、内因
| 
 | 
 day1 
 | 
 day2 
 | 
 day3 
 | 
 day4 
 | 
 day5 
 | 
 day6 
 | 
|---|---|---|---|---|---|---|
| 假设 | 
 A先写 
 | 
 A先写 
 | 
 B先写 
 | 
 B先写 
 | 
 A先写 
 | 
|
| log | 
 day1的A+B 
 | 
 day2的B 
 | 
 day3的B 
 | 
 day4的A+其他B 
 | 
 day5的A+其他B 
 | 
 day6的B 
 | 
| log.day1 | 
 | 
 day2的A 
 | 
 day2的A 
 | 
 day2的A 
 | 
 day2的A 
 | 
 day2的A 
 | 
| log.day2 | 
 day3的A 
 | 
 day3的A 
 | 
 day3的A 
 | 
 day3的A 
 | 
||
| log.day3 | 
 day4的第一个B 
 | 
 day4的第一个B 
 | 
 day4的第一个B 
 | 
|||
| log.day4 | 
 day5的第一个B 
 | 
 day5的第一个B 
 | 
||||
| log.day5 | 
 day6的A 
 | 
多进程使用同一log4j配置导致的日志丢失与覆盖问题的更多相关文章
- 日志log4j配置详情,日志log具体到你想不到
		
一.Log4j简介Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局). 1.LoggersLoggers组件在此系统中被分为五个级别:DEBU ...
 - 配置Tomcat的日志系统
		
成功配置tomcat的log4j日志系统,格式:HTML+每天以yyyy-mm-dd.log命名的日志文件 一.引言: 实习单位让用log4j配置webapp的日志系统,要求产生的日志文件是html格 ...
 - log4j配置日志文件log4j.appender.R.File相对路径方法
		
方法一. 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs ...
 - Log4j配置的经典总结,打印日志文件,日志存库
		
一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sy ...
 - Log4j实现对Java日志的配置全攻略
		
1. 配置文件 Log4J配置文件的基本格式如下: #配置根Logger log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , ...
 - Log4j配置详解及不同的包(package)下的日志写入到不同的日志文件下
		
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt262 以下都是log4j.properties要写入的内容: 一:参数介绍: ...
 - Log4j按级别输出日志到不同文件配置分析 (转:projava)
		
关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的 log4j.rootLogger=info,stdout,in ...
 - log4j 配置日志输出(log4j.properties)
		
轉: https://blog.csdn.net/qq_29166327/article/details/80467593 一.入门log4j实例 1.1 下载解压log4j.jar(地址:http: ...
 - log4j日志输出到日志文件中和控制台中   +log4j配置详解
		
1.引入log4j的jar包 https://mvnrepository.com/,可以找到log4j的jar和依赖. 2.创建log4j.properties,并配置log4j #设置日志的级别 , ...
 
随机推荐
- 什么是Viewport
			
什么是Viewport 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机 ...
 - ApplicationContextAware使用理解
			
接口的作用 当一个类实现了这个接口(ApplicationContextAware)之后,Aware接口的Bean在被初始之后,可以取得一些相对应的资源,这个类可以直接获取spring 配置文件中 所 ...
 - Mysql 索引类型+索引方法
			
MYSQL索引: PRIMARY(唯一且不能为空:一张表只能有一个主键索引). INDEX(普通索引). UNIQUE(唯一性索引). FULLTEXT(全文索引:用于搜索很长一篇文章的时候,效果最好 ...
 - 使用koa-mysql-session时报错
			
描述 在本地测试代码没问题,但是部署到服务器上时就报错. 错误 > cross-env WEBPACK_TARGET=node NODE_ENV=production node ./server ...
 - 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)
			
前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...
 - 永恒之蓝复现(win7/2008)
			
Kali对Windows2008/7的MS17010漏洞测试(MSF自带模块) 0x01 说明 其实这个MSF自带的exp模块还是挺让人伤脑筋的,因为它支持的OS并不是很多,也就Windows Ser ...
 - python变量和运算
			
本文收录在Python从入门到精通系列文章系列 1. 指令和程序 计算机的硬件系统通常由五大部件构成,包括:运算器.控制器.存储器.输入设备和输出设备. 其中,运算器和控制器放在一起就是我们通常所说的 ...
 - js 重写a标签的href属性和onclick事件
			
适应场景:假如移动端拨打电话,需要给a标签添加href属性,但是由于需求,需要链接跳转的同时给a标签添加onclick事件,如果不做任何处理的话,默认执行点击事件,而不会跳转href属性的链接. 怎么 ...
 - 一种logging封装方法,不会产生重复log
			
在调试logging的封装的时候,发现已经调用了logging封装的函数,在被其它函数再调用时,会出现重复的logging.原因是不同的地方创建了不同的handler,所以会重复,可以使用暴力方法解决 ...
 - 微软的分布式应用框架 Dapr
			
微服务架构已成为构建云原生应用程序的标准,微服务架构提供了令人信服的好处,包括可伸缩性,松散的服务耦合和独立部署,但是这种方法的成本很高,需要了解和熟练掌握分布式系统.为了使用所有开发人员能够使用任何 ...