`
buddie
  • 浏览: 182963 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Log4j的性能优化--FileAppender

    博客分类:
  • Java
 
阅读更多

本文以slf4j.1.7.19为源码展示样例。

项目中用的Appender是org.apache.log4j.RollingFileAppender

在配置文件中加以下两句可以减少磁盘IO操作

 

log4j.appender.all.bufferedIO=true
log4j.appender.all.bufferSize=81920

 

 

第一个表示IO使用缓冲区;

第二个参数表示缓冲区的大小,单位是B,字节;

 

相关源码如下:org.apache.log4j.FileAppender

 

public
  synchronized
  void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize)
                                                            throws IOException {
    LogLog.debug("setFile called: "+fileName+", "+append);

    // It does not make sense to have immediate flush and bufferedIO.
    if(bufferedIO) {
      setImmediateFlush(false);
    }

    reset();
    FileOutputStream ostream = null;
    try {
          //
          //   attempt to create file
          //
          ostream = new FileOutputStream(fileName, append);
    } catch(FileNotFoundException ex) {
          //
          //   if parent directory does not exist then
          //      attempt to create it and try to create file
          //      see bug 9150
          //
          String parentName = new File(fileName).getParent();
          if (parentName != null) {
             File parentDir = new File(parentName);
             if(!parentDir.exists() && parentDir.mkdirs()) {
                ostream = new FileOutputStream(fileName, append);
             } else {
                throw ex;
             }
          } else {
             throw ex;
          }
    }
    Writer fw = createWriter(ostream);
    if(bufferedIO) {
      fw = new BufferedWriter(fw, bufferSize);
    }
    this.setQWForFiles(fw);
    this.fileName = fileName;
    this.fileAppend = append;
    this.bufferedIO = bufferedIO;
    this.bufferSize = bufferSize;
    writeHeader();
    LogLog.debug("setFile ended");
  }

 

 

可见只有bufferedIO配置为true,才会使用缓冲区。

bufferedIO默认为false,相关源码如下:

 

/**
     Do we do bufferedIO? */
  protected boolean bufferedIO = false;

  /**
   * Determines the size of IO buffer be. Default is 8K. 
   */
  protected int bufferSize = 8*1024;

 

 

bufferSize默认为8K,如果够用的话,可以不配置,只配置bufferedIO为true,即可。

 

另外,如果IO确实是应用的瓶颈,可以考虑使用org.apache.log4j.AsyncAppender。这是异步的操作。

 

分享到:
评论

相关推荐

    Log4j日志包

    log4j.appender.testfile=org.apache.log4j.FileAppender log4j.appender.testfile.File=c\:\\file.html log4j.appender.testfile.Append=false log4j.appender.testfile.layout=org.apache.log4j.HTMLLayout log4j...

    log4j日志驱动包

    log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=file.log log4j.appender.FILE.Append=false log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE....

    log4j中配置日志文件相对路径方法分析

    解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR...

    Log4j日志管理系统简单使用说明

     org.apache.log4j.FileAppender(文件),  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  ...

    log4j中配置日志文件相对路径方法(PDF)

    本文档提供log4j配置相对路径三种方法:log4j.properties文件配置、xml文件配置和通过servlet初始化方式来配置,希望对大家有所帮助

    Log4j 学习笔记.doc

    Log4j 学习笔记. 1. Log4j的类图 2. Logger:日志写出器 1. Logger的输出方法 2. Logger的命名规则 3. Log level 4. 示例代码 5. 关于logger的两点说明 3. Appender:日志目的地 1. ConsoleAppender 2. ...

    log4j详解与实战 - 企业应用

    log4j详解与实战 - 企业应用 Logger - 日志写出器,供程序员输出日志信息 Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去 ConsoleAppender - 目的地为控制台的Appender FileAppender - 目的地...

    Log4j的扩展

    Java开发中使用Log4j 来记录log非常的方便,但是出现问题时需要查询Log时是很痛的,因为Log4j只提供了将Log记录的文件的方法却没有将...特此扩展了Log4j 中的FileAppender ,让其可以按小时来记录Log。或者按天来记录。

    log4jToFileAppender.zip

    本工程用于研究log4j日志输出目的地org.apache.log4j.FileAppender的使用方法 本工程编码方式:UTF-8 本工程开发工具:MyEclipse

    log4j-json:Alfresco 的 Json 格式日志

    以json格式输出应用程序日志 作者:史蒂夫·里格比 ... log4j.appender.Json=org.apache.log4j.FileAppender log4j.appender.Json.File=${logfilename}.json log4j.appender.Json.layout=net.logstash.

    Java进阶课程日志框架视频教程

    --15-Log4j的FileAppender配置.mp4 --16-Log4j的JDBCAppender配置.mp4 --17-Log4j的自定义logger.mp4 --18-JCL入门介绍.mp4 --19-JCL原理介绍.mp4 -- ---讲义 -日志技术(上).pdf - --day02 -day02资料.zip -

    Log4net详细说明使用

    <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="log-file.txt" /> <layout type="log4net.Layout.PatternLayout"> [Header] "/> [Footer] "/> [%t]...

    qt日志管理类 log4qt

    2)Appender,用于将Log记录到指定的媒介上,比如有ConsoleAppender,将Log信息输出到控制台上,FileAppender,将Log信息数到到文件中。可以向log4qt库同时指定多个Appender,则各类事件就会同时被输出到多个媒介上...

    Log4qt扩展

    扩展了Log4qt中的FileAppender类(DynamicFileAppender)是他可以根据需求将Log记录到不同的File中。如每小时记录一个Log等。

    log4net实例

    log4net实例,多种输出方式: AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。 ConsoleAppender 将日志输出到应用程序控制台。 EventLogAppender 将日志写到Windows Event Log。 ...

    打印日志等异常处理,使用Log4j的配置

    #如果一条日志信息的级别大于等于配置文件的级别,就记录配置输出源所对应的辅助类:log4j.appender.输出源名称=类名,如果输出到文件就写FileAppender #指定文件名 Tomcat的根目录: #指定布局方式(消息放入文件...

    增强版Log4cpp

    Log4cpp 修改版,基于Log4cpp-1.1.3 1、新增Microsoft Visual Studio 2008的解决方案,并修正几处兼容性问题。 2、新增Microsoft Visual Studio 2017的解决方案,并修正几处兼容性问题。 3、新增Microsoft Visual...

    lo4net.dll

    type="log4net.Appender.FileAppender" > <param name="File" value="log-file.txt" /> <layout type="log4net.Layout.PatternLayout"> [Header]\r\n"/> [Footer]\r\n"/> value="%d [%t] %-5p %...

    log4net.rar

    常用的配置文件定义有三种不同的Appender,分别是ADO.NET 记录到数据,ConsoleAppender 从控制台输出, FileAppender 日志信息...然而Log4Net 的配置附着器远不止这些,这里上传一个比较全的附着器配置文件供大家参考。

    android log记录

    android log记录所需要的文件 1、建立使用logger对象 private static final Logger logger = LoggerFactory.getLogger(main.class); 2、在程序的第activit或者service的oncreate方法里初始化方法 ...

Global site tag (gtag.js) - Google Analytics