1. 常用的DailyRollingFileAppender与RollingFileAppender是否同步?

1.1 代码分析

2. log4j 1.2.x提供了异步appender是什么?AsyncAppender

2.1 AsyncAppender配置

2.2 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 异步日志问题的解决方案

log4j2异步日志配置及官方文档的问题澄清

3.2 log4j 2.x 异步日志性能高的关键

采用了 disruptor提供的队列。后面有文章详细分析。

log4j 异步日志问题分析的更多相关文章

  1. Log4j的日志级别分析(转)

    说明:Log4j的日志是有级别的,从低到高顺序为:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF,当定义了日志级别为 ...

  2. log4xx/log4j异步日志配置示例

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration S ...

  3. logback&log4j异步日志配置

    logback 原始配置 配置 appender, 控制文件的滚动方式,日志的输出格式. <appender name="method-time-appender" clas ...

  4. shell脚本异步日志分析-接口耗时、可用率

    背景:现有日志接入日志报表大盘,为了避免作业高峰期间(双十一),系统也要观测系统整体情况,因此提出了观测近五分钟,接口成功率以及耗时等工具(默认统计最近五分钟,并进行结果汇总统计) 使用说明 前提:p ...

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

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

  6. Log4j2中的同步日志与异步日志

    1.背景 Log4j 2中记录日志的方式有同步日志和异步日志两种方式,其中异步日志又可分为使用AsyncAppender和使用AsyncLogger两种方式. 2.Log4j2中的同步日志 所谓同步日 ...

  7. 一个轻巧高效的多线程c++stream风格异步日志(一)

    一个轻巧高效的多线程c++stream风格异步日志 一个轻巧高效的多线程c++stream风格异步日志 前言 功能需求 性能需求 Logger实现 LogStream类 Logger类 LogStre ...

  8. log4j2异步日志解读(二)AsyncLogger

    前文已经讲了log4j2的AsyncAppender的实现[log4j2异步日志解读(一)AsyncAppender],今天我们看看AsyncLogger的实现. 看了这个图,应该很清楚AsyncLo ...

  9. 一次鞭辟入里的 Log4j2 异步日志输出阻塞问题的定位

    一次鞭辟入里的 Log4j2 日志输出阻塞问题的定位 问题现象 线上某个应用的某个实例突然出现某些次请求服务响应极慢的情况,有几次请求超过 60s 才返回,并且通过日志发现,服务线程并没有做什么很重的 ...

随机推荐

  1. MyBatis传入参数为集合 list 数组 map写法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.ite ...

  2. 获取checkbox复选框的值

    <title>CheckBox</title> <script type = "text/javascript"> doGetVal: func ...

  3. Yii源码阅读笔记(五)

    Object 是一个基础类,实现了属性的功能,其基本内容如下: namespace yii\base; use Yii; /** * Object is the base class that imp ...

  4. linux下利用curl监控网页shell脚本

    #!/bin/bash smail() {mail -s "$1" gjw_apparitor@gmail.com <<EOF$1$2====report time: ...

  5. P1541 乌龟棋

    30分做法,暴力枚举: #include <bits/stdc++.h> using namespace std; const int maxn = 400; int n, m; int ...

  6. java CyclicBarrier

    import java.io.IOException; import java.util.Random; import java.util.concurrent.BrokenBarrierExcept ...

  7. 单选按钮控件(Ridio Button)的使用

    VC学习笔记5:单选按钮控件(Ridio Button)的使用 一.对单选按钮进行分组: 每组的第一个单选按钮设置属性:Group,Tabstop,Auto;其余按钮设置属性Tabstop,Auto. ...

  8. hive中的常用方法(case,cast,unix_timestamp)

    1.case的用法 )格式1 case col when value then '' when value then '' else '' end )格式2 case when col='value' ...

  9. 汇编查看StackFrame栈帧

    INCLUDE Irvine32.inc myProc PROTO, x:DWORD, y:DWORD .data .code main proc mov eax,0EAEAEAEAh mov ebx ...

  10. ArcGIS中的坐标系定义与转换 (转载)

    原文:ArcGIS中的坐标系定义与转换 (转载) 1.基准面概念:  GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定,因此欲正确定义GIS系统坐 ...