经过大型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异步写日志的效率测试源码
NULL 博文链接:https://xinlanzero.iteye.com/blog/729146
Log4j日志配置说明,Log4j日志配置说明Log4j日志配置说明,Log4j日志配置说明
分三类文件,pom通过maven构建所需jar包,log4j2.xml配置文件,TestController.java测试类,使用debug测试效果较明显。
tomcat6.0 配log4j日志的必须文件及配置过程 tomcat6-------lib | |--------tomcat-juli-adapters.jar | |--------log4j.jar | |--------log4j.properites | |----bin |--------tomcat-juli.jar 最后把log4...
使用log4j2实现日志数据脱敏
logstash采集log4j日志发送到es配置文件,可以把日志根据日志级别区分开,一个级别一条日志是es中的一条数据
log4j日志管理log4j日志管理log4j日志管理log4j日志管理log4j日志管理
禁用与使用日志请求只是Log4j其中的一个小小的地方,Log4j日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。...
每天生成一个log4j日志文件,如果只需要将最近一段时间内的日志文件保留,以前或更早的文件不用保留。例如只保留最近一周的日志,日志文件保留3天等等这些。。。通过这个jar包就可以实现。 log4j.properties文件在...
log4j.rootLogger=debug,CONSOLE,testfile,A1,MAIL ################### # Console Appender ################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=...
tomcat下的log4j日志配置,给tomcat配置log4j有好几种方法,我知道的有: 一、tomcat级别的统一日志管理 二、每个webapp分别配置log4j
Log4j比较全面的配置 log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true # 应用于控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j....
根据项目需要,要求日志文件名及输出的日志内容头为特殊的格式,因此重写了log4j的一些方法,如要求的格式和项目不同,可根据示例参考进行再次的修改
log4j 日志服务器 一个系统可能有多个子系统组成,这些子系统都有自己的日志,并且运行在不同的操作系统和主机上,收集这些日志对运营人员来说也比较困难。 因此决定在平台中采用日志服务器来做到集中日志管理,平台...
log4j按功能保存日志
log4j配置文件以及配置文件说明 包里有一个log4j配置文件 和一个配置详解
主要介绍了 log4j 详解异步日志的配置和测试的相关资料,需要的朋友可以参考下
log4j日志框架 log4j日志框架 log4j日志框架log4j日志框架