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 才返回,并且通过日志发现,服务线程并没有做什么很重的 ...
随机推荐
- 使用shape设置只有部分边框有颜色
<?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android=" ...
- AsyncTask的基本使用
// String --> doInBackground(Params... params)的参数 // File --> publishProgress(Progress... valu ...
- Swing 刷新容器
JPanel pchks = new JPanel();// 容器刷新(重新layout所有空间)pchks.validate();// 容器重绘(当容器内的东西由多变少时,防止多出来的部分没有清楚) ...
- json+mvc
返回JsonResult序列化的Json对象 public class MyController : Controller { // 必须返回ActionResult类型 public ...
- 做了一个简易的git 代码自动部署脚本
做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08) 阅读(200 ...
- Yii源码阅读笔记(三)
接着上次的继续阅读BaseYii.php vendor/yiisoft/yii2/BaseYii.php—— public static function getRootAlias($alias)// ...
- 基于LR的Oracle应用性能测试
最近对一个oracle ERP系统的INV模块进行性能测试,因为之前大部分都是测试web类型的应用,在这方面经验较少,期间也遇到了不少问题,因此有必要作些总结,以备后忘.首先先简单了解下测试对象相关的 ...
- embody the data item with the ability to control access to itself
Computer Science An Overview _J. Glenn Brookshear _11th Edition Such communication needs have long b ...
- 让Storm插上CEP的翅膀 - Siddhi调研和集成
什么是 Siddhi? Siddhi 是一种 lightweight, easy-to-use, open source CEP(Complex Event Processing)引擎,由wso2公司 ...
- 【转】Unity3D开发之Http协议网络通信
之前unity3d项目要做跟服务器通信的模块,然后服务器那边的协议是基于http的Jsonrpc通信方式一开始,用C#的本身类HttpWebRequest来提交请求,很快就在电脑上面成功了,代码也很简 ...