日志记录能够对性能产生较大的影响,如果将日志级别设置成TRACE,JBossAS将会非常慢;相反,将日志级别设置成ERROR,JBossAS的性能将会得到戏剧性的提升。
- 缺省情况下,JBoss将使用INFO级别将日志记录到控制台和server.log;
- 考虑将日志记录到System.out(你可能需要重定向它来捕获JVM的错误);
- 考虑将日志级别设置成ERROR;值得注意的是,JBoss将对Log4j文件的变更进行监控,你可以在运行时修改配置;
- 为自己的Java类添加日志类别过滤;
关闭控制台日志记录:
- 编辑server/slim/conf/log4j.xml;
- 将下面的xml片段
<root>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
修改为:
<root>
<appender-ref ref="FILE"/>
</root>
- 删除如下的xml片段:
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="Target" value="System.out"/>
<param name="Threshold" value="INFO"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message/n -->
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
</layout>
</appender>
修改日志记录级别:
- 编辑server/slim/conf/log4j.xml;
- 删除或注释如下的xml片段
<!-- Limit the org.apache category to INFO as its DEBUG is verbose -->
<category name="org.apache">
<priority value="INFO"/>
</category><!-- Limit the org.jgroups category to WARN as its INFO is verbose -->
<category name="org.jgroups">
<priority value="WARN"/>
</category><!-- Limit apache axis to INFO as its DEBUG is even more verbose -->
<category name="org.jboss.axis">
<priority value="INFO"/>
</category>
改变根类别,将如下xml片段:
<root>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
修改为:
<root>
<priority value="ERROR" />
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
最后,也可能对Log4j最重要的是对自己的类层次添加日志级别的限制;假设正常的使用Log4j,并且没有往System.out输出任何东西,这将在很大程度上减少Log4j的开销,并且可以完全享受到if (log.isDebugEnabled())之类调用带来的好处;如果不这样做的话,代码中的所有日志将会被格式化后传给appender,appender在入口处将会去除这些日志,这将会产生大量的垃圾;假设Java包以a.b开头,向log4j.xml中添加如下xml片段:
<category name="a.b">
<priority value="INFO"/>
</category>
该xml片段可以添加到log4j.xml中org.apache和org.jboss类别过滤器相同的位置;