`
buddie
  • 浏览: 185280 次
  • 性别: 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。这是异步的操作。

 

分享到:
评论

相关推荐

    apache-log4j-2.9.0-src.zip

    通过研究Log4j 2.9.0的源码,开发者可以了解其设计模式、组件交互以及性能优化策略,这对于优化日志系统、解决日志相关问题或开发新的日志框架具有极大的价值。同时,这也是学习Java日志处理和并发编程的一个宝贵...

    apache-log4j-2.18.0-bin.zip

    版本号2.18.0表明这是Log4j的一个较新版本,可能包含了一些安全更新和性能优化。 Log4j的核心功能是为应用程序提供灵活的日志记录机制,允许开发者控制日志输出的级别(如DEBUG、INFO、WARN、ERROR等)、格式和目的...

    log4j各版本jar包

    在配置文件(通常是log4j.properties或log4j.xml)中,我们可以设置日志级别(DEBUG、INFO、WARN、ERROR等)、输出目的地(如ConsoleAppender、FileAppender等)、以及自定义的布局格式(如PatternLayout)等。...

    apache-log4j-2.9.1jar包及源码

    4. **性能优化**:Log4j 2引入了异步日志记录,提高了高并发环境下的性能。 5. **日志管理**:通过Filter和Lookup机制,可以实现日志的动态过滤和变量替换,方便管理和分析日志数据。 在实际开发中,引入Log4j通常...

    log4j依赖jar包

    为了保证最佳性能和安全性,开发者应时刻关注Log4j的更新,及时升级到最新稳定版本,避免已知的漏洞和缺陷。此外,合理地配置日志级别和输出策略,既能帮助调试问题,又不会对系统性能造成过大的负担。 总之,Log4j...

    apache-log4j-2.0-beta7-bin.zip

    1. **性能提升**:Log4j 2.0优化了内部结构,使其在性能上远超1.x版本。它利用了Java并发库,实现了异步日志记录,从而减少了日志输出对应用性能的影响。 2. **动态配置**:Log4j 2.0支持动态配置更新,这意味着在...

    log4j-1.2.15.jar

    5. **性能优化**:Log4j 1.2.15针对性能进行了优化,尤其是在高并发环境下的表现,降低了日志处理的开销。 三、使用Log4j 1.2.15.jar 1. **引入依赖**:在项目中添加Log4j 1.2.15.jar依赖,可以手动下载放入类路径...

    log4j-2.8.2

    Log4j-core提供了多种Appender实现,如ConsoleAppender、FileAppender、RollingFileAppender等,满足不同场景需求。 2. Layouts:Layouts决定了日志消息的格式,如PatternLayout、JSONLayout等,可自定义输出格式,...

    apache-log4j-2.19.0-bin

    3. **Appenders**:Appenders是Log4j用于输出日志的地方,如ConsoleAppender将日志打印到控制台,FileAppender写入文件,SMTPAppender通过邮件发送报警等。2.19.0可能包含新的或优化的Appender实现。 4. **Filters*...

    log4j 源码包 日志包 2.11.0

    Log4j 2.11.0提供了丰富的Appender实现,如ConsoleAppender、FileAppender、SMTPAppender等。 7. **过滤器** 过滤器用于控制哪些日志事件会被记录和输出,可以根据日志级别、关键字、MDC(Mapped Diagnostic ...

    log4j-2.5-src

    四、性能优化 Log4j 2.5引入了异步日志处理,通过`AsyncAppender`和`AsyncLogger`实现了日志输出的并发处理,避免了日志输出对主线程的影响。同时,使用了`LogEventPool`来复用`LogEvent`对象,减少内存分配和垃圾...

    log4j-1.2.17.jar

    slf4j-log4j12-1.7.26.jar是SLF4J与Log4j之间的桥接器,使得应用可以使用SLF4J API调用Log4j的功能。 **6. 结语** 理解并掌握Log4j的使用,对于提升Java应用的调试效率和维护性至关重要。通过合理配置log4j....

    log4j-1.2.16下载

    log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=logs/app.log log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d{...

    apache-log4j-2.3 jar包

    Log4j 2.3 版本是对先前版本的更新,可能包含性能优化、新功能或错误修复。 在Java开发环境中,Eclipse IDE 提供了一个便捷的功能,即添加外部库(ADD extenal library),使得开发人员可以轻松地将Log4j 2.3集成到...

    android-logging-log4j-1.0.3.jar

    log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=/sdcard/logfile.log log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d...

    log4j-jar包

    Log4j 2.12.1版本相较于之前的版本,增强了性能和稳定性,引入了更多可配置选项,使得日志管理更加灵活。对于新手开发者而言,熟练掌握Log4j的使用能够大大提高问题排查和代码调试的效率,因此这是一个值得学习和...

    apache-log4j-1.2

    Log4j 1.2.15支持多种Appender,如ConsoleAppender(控制台)、FileAppender(文件)和SMTPAppender(电子邮件)等。 4. **Layout**:Layout组件决定了日志信息的格式,例如SimpleLayout、PatternLayout和...

    apache-log4j-2.8.1-bin.zip

    在Log4j 2.8.1中,有多种预定义的Appender可供选择,如ConsoleAppender(控制台)、FileAppender(文件)和SMTPAppender(电子邮件)。 4. **Layout**: 定义了日志事件的格式。例如,PatternLayout允许自定义输出...

    android相关log4j-Jar包

    props.setProperty("log4j.appender.FileAppender", "org.apache.log4j.FileAppender"); props.setProperty("log4j.appender.FileAppender.File", "/sdcard/myapp.log"); props.setProperty("log4j.appender....

    log4j-tutorial-en.pdf

    ### 关于 log4j 的教程知识点总结 ### #### 一、引言与概述 #### log4j 是一个广泛应用于 Java 应用程序的日志记录工具,由 Apache 软件基金会开发并维护。该工具提供了丰富的功能,允许开发者在应用程序中进行...

Global site tag (gtag.js) - Google Analytics