1

我确信这很简单,但在 Google 和 SO 之间我还没有找到答案。

我有一个带有 log4j 1.2.9 的 jboss 4.0.2(我知道它很旧,但我现在无法更改)webapp。我已经为控制台附加程序和滚动文件附加程序设置了日志,它们都可以正常工作。

我正在尝试设置一个日志文件,该文件将记录来自一个包的消息(在我的例子中,我们用于 SFTP 的 com.sshtools 包)。主日志失败,控制台也可以有这些消息(或者没有,我真的不在乎)。但是,ftp 日志应该只包含来自 com.sshtools 包的消息。不幸的是,当我运行 web 应用程序时,FTP 日志会获取所有消息,而不仅仅是 FTP 消息。

我目前正在使用类别来设置某些包的级别并使用 appender-ref 属性。我曾尝试将该包的可加性设置为 false 无济于事。我尝试将类别切换到记录器无济于事。我尝试为所有软件包设置 appender-ref 标签(它们将进入 CONSOLE 和 FILE 但不是 FTP)无济于事。

我已经看到使用属性文件而不是使用 xml 文件执行此操作的响应。由于我不知道如何从属性文件转换为 xml 文件,因此这些对我没有帮助。

我的 log4j.xml 如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<!-- ===================================================================== -->
<!--                                                                       -->
<!--  Log4j Configuration                                                  -->
<!--                                                                       -->
<!-- ===================================================================== -->


<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

   <!-- ================================= -->
   <!-- Preserve messages in a local file -->
   <!-- ================================= -->

   <!-- A time/date based rolling appender -->
   <appender name="FILE" class="org.jboss.logging.appender.RollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.home.dir}/log/server.log"/>

     <param name="Append" value="true"/>
     <param name="MaxFileSize" value="20MB"/>
     <param name="MaxBackupIndex" value="50"/>

      <!-- Rollover at midnight each day -->
     <param name="DatePattern" value="'.'yyyy-MM-dd"/>


      <layout class="org.apache.log4j.PatternLayout">
         <!-- The default pattern: Date Priority [Category] Message\n -->
         <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

      </layout>
   </appender>

   <appender name="FTP" class="org.jboss.logging.appender.RollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.home.dir}/log/ftp.log"/>

     <param name="Append" value="true"/>
     <param name="MaxFileSize" value="20MB"/>
     <param name="MaxBackupIndex" value="50"/>

      <!-- Rollover at midnight each day -->
      <param name="DatePattern" value="'.'yyyy-MM-dd"/>


      <layout class="org.apache.log4j.PatternLayout">
         <!-- The default pattern: Date Priority [Category] Message\n -->
         <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

      </layout>
   </appender>

   <!-- ============================== -->
   <!-- Append messages to the console -->
   <!-- ============================== -->

   <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>


   <!-- ================ -->
   <!-- Limit categories -->
   <!-- ================ -->

   <!-- Limit the org.apache category  -->
   <category name="org.apache">
      <priority value="INFO"/>
   </category>

   <!-- Limit the org.jgroups category  -->
   <category name="org.jgroups">
      <priority value="WARN"/>
   </category>

   <!-- Limit apache axis  -->
   <category name="org.jboss.axis">
      <priority value="INFO"/>
   </category>

   <!-- Limit JBoss categories -->
   <category name="org.jboss">
      <priority value="INFO"/>
   </category>

   <!-- Limit the JSR77 categories -->
   <category name="org.jboss.management">
      <priority value="INFO"/>
   </category>

   <!-- Limit j2ssh categories -->
   <category name="com.sshtools">
      <priority value="WARN"/>
      <appender-ref ref="FTP"/>
   </category>

   <!-- Limit Hibernate categories -->
   <category name="org.hibernate">
      <priority value="ERROR"/>
   </category>

   <!-- Limit mchange categories -->
   <category name="com.mchange">
      <priority value="WARN"/>
   </category>

   <!-- ======================= -->
   <!-- Setup the Root category -->
   <!-- ======================= -->

   <root>
      <appender-ref ref="CONSOLE"/>
      <appender-ref ref="FILE"/>
      <appender-ref ref="FTP"/>
   </root>


</log4j:configuration>

编辑:我已经尝试重新排序类别和其中的标签(并不是说它应该有所作为),但仍然没有改变。

4

1 回答 1

1

您可以从根 logger logger 元素中删除 FTP appender,因为 FTP 配置为接受来自 com.sshtools 包的日志记录请求。

记录器位于记录器层次结构的顶部。给定记录器的每个启用的记录请求将被转发到该记录器中的所有附加程序,以及层次结构中更高的附加程序。换句话说,appender 是从 logger 层次结构中附加继承的。例如,如果将控制台附加程序添加到根记录器,则所有启用的日志记录请求至少将打印在控制台上。如果另外一个文件追加器被添加到一个记录器,比如 L,那么启用的 L 和 L 的孩子的记录请求将打印在一个文件和控制台上。可以通过将 additivity 标志设置为 false 来覆盖此默认行为,以便 appender 累积不再是相加的。

我希望这有帮助。

于 2013-01-30T09:14:03.353 回答