经过大型J2EE项目实测,Log4j的日志输出对系统性能有比较显著的影响,尤其是日志输入量比较大时,例如:系统并发量很大,显示Hibernate的sql和参数日志,或日志级别较低DEBUG或INFO时等。
使用Async Logger控制日志输出可以显著改善系统性能。
1) 测试用例:同步文件日志输出
测试功能:模块管理功能,
输出Hibernate SQL和参数,输出到文件,配置如下:
<appender name="Hibernate_SQL" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="log/Hibernate_SQL.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd-HH" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%-5p](%C,%L) - %m%n" />
</layout>
</appender>
<category name="org.hibernate.SQL">
<priority value="TRACE" />
<appender-ref ref="Hibernate_SQL" />
</category>
<category name="org.hibernate.type">
<priority value="TRACE" />
<appender-ref ref="Hibernate_SQL" />
</category>
运用JMeter进行压力测试,线程数50,运行4次,计算请求平均响应值(Rame-up Period: 1, 循环次数:1)
测试结果:AVG: 12565ms
2) 测试用例:异步文件日志输出
Log4j.xml 配置修改如下:
<appender name="ASYNC_Hibernate_SQL" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="512"/>
<appender-ref ref="Hibernate_SQL"/>
</appender>
<category name="org.hibernate.SQL">
<priority value="TRACE" />
<appender-ref ref="ASYNC_Hibernate_SQL" />
</category>
<category name="org.hibernate.type">
<priority value="TRACE" />
<appender-ref ref="ASYNC_Hibernate_SQL" />
</category>
在BufferSize为 32, 64,128,256,512,2048时测试的请求平均耗时,及较测试用例1中的性能提高率对比如下所示:
同步,异步日志性能对比分析
(每次50并发,运行4次)
sync 日志输出
原时间消耗
12565
async 日志输出
缓冲区大小
平均耗时
性能提高率
32
6744
46.33%
64
8487
32.46%
128
6899
45.09%
256
6606
47.43%
512
7306
41.85%
2048
3406
72.89%
从结果可以看出,性能提高率最高 47%。最低32%。缓冲为256时性能改善最佳, 提高47%
结论:使用Log4j的J2EE应用,日志的优化对系统性能有显著影响:
1)尽量减少不必要的日志输出,尤其要避免 root logger上过低级别的输出,避免在生产环境上向控制台输出日志。例如,下面的配置是很影响性能的,:
<root>
<priority value="DEBUG" />
<appender-ref ref="CONSOLE" >
</root>
2) 使用Async logger输出日志,buffersize在相应日志频率下,越大越好,对于大型项目,可以选2048以上值。
分享到:
相关推荐
Log4j2是一款广泛使用的Java日志框架,它提供了丰富的日志记录功能和高度的可配置性。在大型系统中,日志记录是至关重要的,因为它可以...在设计和开发过程中,合理地利用异步日志能够显著提升系统的整体性能和稳定性。
"(转)Log4j的AsyncAppender能否提升性能"这个标题涉及到Log4j的一个特性——AsyncAppender,它是Log4j为了提高日志处理性能而引入的一种异步日志写入机制。 AsyncAppender的主要工作原理是通过使用单独的线程池来...
总结来说,Log4j2异步写日志通过`AsyncAppender`实现,配置文件`log4j2.xml`是关键,它定义了日志的输出方式和异步处理。`TestController.java`中的日志调用则实际触发了异步日志记录过程。这种机制在高并发环境下...
Log4j2引入了异步日志记录器,通过使用后台线程处理日志事件,从而避免了这种阻塞,极大地提升了应用的性能。 **多线程支持** 在多线程环境中,Log4j2能够确保日志事件的正确性和顺序。每个线程都有自己的日志上...
总的来说,Log4j2的异步日志特性是提升系统性能的有效手段,尤其是在需要大量记录日志的系统中。通过深入理解和实践"Log4j2 Demo性能测试",开发者可以更好地掌握这一技术,从而在实际项目中发挥出Log4j2的潜力,...
Log4Qt是Qt框架下的一款日志记录库,它基于流行的Java日志库log4j设计,为C++开发者提供了一套强大、灵活的日志处理机制。本文将深入探讨Log4Qt日志管理的核心概念、功能特性以及如何在实际项目中有效应用。 一、...
总之,Log4j 提供了灵活的日志配置选项,特别是异步日志记录,能有效提升系统性能。通过正确配置和测试,我们可以确保日志系统按照预期工作,为日常开发和运维提供有力支持。希望本文能帮助你更好地理解和应用 Log4j...
8. **日志性能**:Log4j设计时考虑了性能,它的日志记录是线程安全的,且在不启用日志记录时几乎无性能开销。此外,异步日志记录器(AsyncAppender)进一步提高了日志处理的速度。 9. **扩展性**:Log4j提供了丰富...
为了提高性能,log4j-1.2.17引入了异步日志记录,通过使用`AsyncAppender`,可以在不影响主线程性能的情况下,将日志输出任务放到后台处理。此外,合理配置日志级别,避免不必要的日志输出,也能显著提升系统效率。 ...
- 异步日志记录:通过使用AsyncAppender,可以实现日志记录的异步化,提高系统性能。 - 日志归档:使用RollingFileAppender可以实现日志文件的自动滚动和归档。 7. **Log4j的替代品** 虽然Log4j非常流行,但随着...
1. **异步日志记录**:Log4j支持异步日志记录,通过AsyncAppender可以在不阻塞主线程的情况下高效地处理日志。 2. **自定义Appender和Layout**:如果内置的Appender和Layout无法满足需求,用户可以创建自己的实现。...
2. 异步日志:Log4j2支持异步日志记录,通过`AsyncAppender`实现,提高日志处理性能。 3. 捕获异常:使用`%throwable`占位符可以将异常堆栈信息完整地输出到日志。 总之,Spring Boot Starter Log4j2使得在Spring ...
3. **异步日志**: 使用AsyncAppender,可以异步地处理日志,避免因日志输出导致的性能影响。 4. **MDC与NDC**: Mapped Diagnostic Context (MDC) 和 Nested Diagnostic Context (NDC) 提供了在日志中添加上下文信息...
Apache Log4j是Java平台上的一个著名日志记录框架,其2.0版本的重大更新带来了许多性能提升和功能增强。Log4j 2.0 RC1(Release Candidate 1)是该系列的一个候选版本,意味着它在正式发布之前用于测试和反馈。这个...
1. **异步日志记录**:通过使用AsyncAppender,可以提高日志记录的性能,避免阻塞主线程。 2. **MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context)**:用于存储与当前线程相关的诊断信息,帮助...
2. 异步日志:通过AsyncAppender,可以实现日志输出的异步化,提高系统的整体性能。 3. 属性文件引用:在配置文件中,可以引用系统属性或环境变量,使得配置更灵活。 4. 插件支持:Log4j 2引入了插件体系,允许...
- Log4J2引入了AsyncAppender,允许异步处理日志,提高性能,特别是在高并发环境下。 8. **性能优化** - 使用`org.apache.log4j.Logger.isXXXEnabled()`检查当前日志级别是否允许记录,避免不必要的对象创建和...
Log4j2的一大优势是提供了异步日志记录能力,通过使用内置的AsyncAppender或AsyncLogger,可以在不牺牲性能的情况下提高日志处理效率。 **插件系统** Log4j2具有强大的插件系统,允许开发者创建自定义的Appender、...
2. **异步日志处理**:Log4j2引入了AsyncAppender,它可以实现日志事件的非阻塞处理,显著提升系统性能。 3. **插件体系**:Log4j2通过插件系统支持各种日志输出格式(如Console、File、SMTP等)和过滤器,方便扩展...