本文以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 2.9.0的源码,开发者可以了解其设计模式、组件交互以及性能优化策略,这对于优化日志系统、解决日志相关问题或开发新的日志框架具有极大的价值。同时,这也是学习Java日志处理和并发编程的一个宝贵...
版本号2.18.0表明这是Log4j的一个较新版本,可能包含了一些安全更新和性能优化。 Log4j的核心功能是为应用程序提供灵活的日志记录机制,允许开发者控制日志输出的级别(如DEBUG、INFO、WARN、ERROR等)、格式和目的...
在配置文件(通常是log4j.properties或log4j.xml)中,我们可以设置日志级别(DEBUG、INFO、WARN、ERROR等)、输出目的地(如ConsoleAppender、FileAppender等)、以及自定义的布局格式(如PatternLayout)等。...
4. **性能优化**:Log4j 2引入了异步日志记录,提高了高并发环境下的性能。 5. **日志管理**:通过Filter和Lookup机制,可以实现日志的动态过滤和变量替换,方便管理和分析日志数据。 在实际开发中,引入Log4j通常...
为了保证最佳性能和安全性,开发者应时刻关注Log4j的更新,及时升级到最新稳定版本,避免已知的漏洞和缺陷。此外,合理地配置日志级别和输出策略,既能帮助调试问题,又不会对系统性能造成过大的负担。 总之,Log4j...
1. **性能提升**:Log4j 2.0优化了内部结构,使其在性能上远超1.x版本。它利用了Java并发库,实现了异步日志记录,从而减少了日志输出对应用性能的影响。 2. **动态配置**:Log4j 2.0支持动态配置更新,这意味着在...
5. **性能优化**:Log4j 1.2.15针对性能进行了优化,尤其是在高并发环境下的表现,降低了日志处理的开销。 三、使用Log4j 1.2.15.jar 1. **引入依赖**:在项目中添加Log4j 1.2.15.jar依赖,可以手动下载放入类路径...
Log4j-core提供了多种Appender实现,如ConsoleAppender、FileAppender、RollingFileAppender等,满足不同场景需求。 2. Layouts:Layouts决定了日志消息的格式,如PatternLayout、JSONLayout等,可自定义输出格式,...
3. **Appenders**:Appenders是Log4j用于输出日志的地方,如ConsoleAppender将日志打印到控制台,FileAppender写入文件,SMTPAppender通过邮件发送报警等。2.19.0可能包含新的或优化的Appender实现。 4. **Filters*...
Log4j 2.11.0提供了丰富的Appender实现,如ConsoleAppender、FileAppender、SMTPAppender等。 7. **过滤器** 过滤器用于控制哪些日志事件会被记录和输出,可以根据日志级别、关键字、MDC(Mapped Diagnostic ...
四、性能优化 Log4j 2.5引入了异步日志处理,通过`AsyncAppender`和`AsyncLogger`实现了日志输出的并发处理,避免了日志输出对主线程的影响。同时,使用了`LogEventPool`来复用`LogEvent`对象,减少内存分配和垃圾...
5. **配置Log4j2**:通常,一个基本的Log4j2配置会指定日志级别(如DEBUG、INFO、WARN等),定义一个或多个Appender(如ConsoleAppender、FileAppender等),并可能包含Layout(如PatternLayout、JSONLayout等)和...
slf4j-log4j12-1.7.26.jar是SLF4J与Log4j之间的桥接器,使得应用可以使用SLF4J API调用Log4j的功能。 **6. 结语** 理解并掌握Log4j的使用,对于提升Java应用的调试效率和维护性至关重要。通过合理配置log4j....
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{...
Log4j 2.3 版本是对先前版本的更新,可能包含性能优化、新功能或错误修复。 在Java开发环境中,Eclipse IDE 提供了一个便捷的功能,即添加外部库(ADD extenal library),使得开发人员可以轻松地将Log4j 2.3集成到...
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 2.12.1版本相较于之前的版本,增强了性能和稳定性,引入了更多可配置选项,使得日志管理更加灵活。对于新手开发者而言,熟练掌握Log4j的使用能够大大提高问题排查和代码调试的效率,因此这是一个值得学习和...
Log4j 1.2.15支持多种Appender,如ConsoleAppender(控制台)、FileAppender(文件)和SMTPAppender(电子邮件)等。 4. **Layout**:Layout组件决定了日志信息的格式,例如SimpleLayout、PatternLayout和...
在Log4j 2.8.1中,有多种预定义的Appender可供选择,如ConsoleAppender(控制台)、FileAppender(文件)和SMTPAppender(电子邮件)。 4. **Layout**: 定义了日志事件的格式。例如,PatternLayout允许自定义输出...
props.setProperty("log4j.appender.FileAppender", "org.apache.log4j.FileAppender"); props.setProperty("log4j.appender.FileAppender.File", "/sdcard/myapp.log"); props.setProperty("log4j.appender....