log4j 异步日志问题分析
1. 常用的DailyRollingFileAppender与RollingFileAppender是否同步?
2. log4j 1.2.x提供了异步appender是什么?AsyncAppender
3. log4j 2.x 异步日志问题的解决方案及分析
3.1 log4j 2.x 异步日志问题的解决方案
3.2 log4j 2.x 异步日志性能高的关键
1. 常用的DailyRollingFileAppender与RollingFileAppender是否同步?
1.1 代码分析
DailyRollingFileAppender
RollingFileAppender
WriterAppender.append(LoggingEvent event)
QuietWriter.write(String string)
分析代码来看,最终依靠QuietWriter的write方法,这个方法是同步的。

那么非常清晰的说明了这两个appender不是异步的。
2. log4j 1.2.x提供了异步appender是什么?AsyncAppender
2.1 AsyncAppender配置
官方解释,AsyncAppender必须使用xml形式的配置
Important note: The AsyncAppender can only be script configured using the DOMConfigurator.
2.2 AsyncAppender分析
根据配置文件发现,AsyncAppender并不是真正能写日志文件的appender,而是引用RollingFileAppender等。 AsyncAppender靠org.apache.log4j.AsyncAppender.Dispatcher这个类来实现异步调用appender写日志的动作。Dispatcher最终用作一个守护线程。靠buffer变量(是一个ArrayList)的wait与notify来搞定buffer中有日志事件的时候再做调用appender写日志动作。
部分分析参见下面截图:



3. log4j 2.x 异步日志问题的解决方案及分析
3.1 log4j 2.x 异步日志问题的解决方案
3.2 log4j 2.x 异步日志性能高的关键
采用了 disruptor提供的队列。后面有文章详细分析。
log4j 异步日志问题分析的更多相关文章
- Log4j的日志级别分析(转)
说明:Log4j的日志是有级别的,从低到高顺序为:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF,当定义了日志级别为 ...
- log4xx/log4j异步日志配置示例
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration S ...
- logback&log4j异步日志配置
logback 原始配置 配置 appender, 控制文件的滚动方式,日志的输出格式. <appender name="method-time-appender" clas ...
- shell脚本异步日志分析-接口耗时、可用率
背景:现有日志接入日志报表大盘,为了避免作业高峰期间(双十一),系统也要观测系统整体情况,因此提出了观测近五分钟,接口成功率以及耗时等工具(默认统计最近五分钟,并进行结果汇总统计) 使用说明 前提:p ...
- ActiveMQ学习总结(6)——ActiveMQ集成Spring和Log4j实现异步日志
我的团队和我正在创建一个由一组RESTful JSON服务组成的服务平台,该平台中的每个服务在平台中的作用就是分别提供一些独特的功能和/或数据.由于平台中产生的日志四散各处,所以我们想,要是能将这些日 ...
- Log4j2中的同步日志与异步日志
1.背景 Log4j 2中记录日志的方式有同步日志和异步日志两种方式,其中异步日志又可分为使用AsyncAppender和使用AsyncLogger两种方式. 2.Log4j2中的同步日志 所谓同步日 ...
- 一个轻巧高效的多线程c++stream风格异步日志(一)
一个轻巧高效的多线程c++stream风格异步日志 一个轻巧高效的多线程c++stream风格异步日志 前言 功能需求 性能需求 Logger实现 LogStream类 Logger类 LogStre ...
- log4j2异步日志解读(二)AsyncLogger
前文已经讲了log4j2的AsyncAppender的实现[log4j2异步日志解读(一)AsyncAppender],今天我们看看AsyncLogger的实现. 看了这个图,应该很清楚AsyncLo ...
- 一次鞭辟入里的 Log4j2 异步日志输出阻塞问题的定位
一次鞭辟入里的 Log4j2 日志输出阻塞问题的定位 问题现象 线上某个应用的某个实例突然出现某些次请求服务响应极慢的情况,有几次请求超过 60s 才返回,并且通过日志发现,服务线程并没有做什么很重的 ...
随机推荐
- 投芯片,现在要n+1模式
给坚持理想的屌丝点个赞.投芯片,现在要n+1模式,n个小项目+一个大项目.团队是基础,屌丝创业要以营利为先导,先要短快,同时要有并行的大项目支撑.小项目赚的钱先解决面包问题,同时为大项目锻炼队伍积累经 ...
- Frenetic QuickInstall
Frenetic a family of network programming languages 官方网站:Frenetic Github:Frenetic QuickInstall 第一步,先安 ...
- Javascript 笔记与总结(1-3)arguments
arguments 是函数运行时的实参列表(对象),每个函数都有自己的 arguments,但不往外层函数寻找 arguments 的相关属性,即不行成链(只有 OA 形成作用域链). 例1 < ...
- Ecshop的购物流程代码分析详细说明
Ecshop的购物流程代码分析详细说明 (2012-07-30 10:41:12) 转载▼ 标签: 购物车 结算中心 商品价格 ecshop ecshop购物流程 杂谈 分类: ECSHOP研究院 同 ...
- Bootstrap插件1--tooltip
在引入bootstrap.js之前我们需要引入jquery的js文件 既然是bootstrap的插件,那么自然需要引用bootstrap.js和bootstrap.css这2个核心文件了 这里了主要介 ...
- LR处理文件上传和下载
文件上传 在业务场景有上传操作时,使用LR能录制到上传操作,代码如下.在录制的原始代码中,Filename的Value是上传的文件名,name的Value是一串文件名的加密串,file的Value也是 ...
- Memcached原理深度分析详解
Memcached是 danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能.关于这个东 西,相信很多人都用过,本文意在通 ...
- Natural Language Toolkit
http://www.nltk.org/ >>> import nltk >>> nltk.download()
- 2016/4/21 关于jquery复习
jQuert AJAX [1]jQuery load()方法 :是AJAX方法, 从服务器加载数据,并把数据放入被选元素中 语法: $(selector).load(URL,data,callback ...
- 【转】CodeIgniter配置之database
CodeIgniter的数据库配置文件位于application/config/database.php, 该文件中定义了$db的二维数组,参考文件如下: 1 2 3 4 5 6 7 8 9 10 1 ...