JBossAS性能优化和瘦身系列(5):Log4j

日志记录能够对性能产生较大的影响,如果将日志级别设置成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类别过滤器相同的位置;

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页