0

次の log4j.xml ファイルを使用します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
   <appender class="org.apache.log4j.RollingFileAppender" name="FILE">
      <param value="${logfile}" name="File" />
      <param value="10" name="MaxBackupIndex" />
      <param value="200MB" name="MaxFileSize" />
      <layout class="org.apache.log4j.PatternLayout">
         <param value="%d[%t] %-5p(%F:&lt;%M&gt;:%L)- %m%n" name="ConversionPattern" />
      </layout>
   </appender>

   <appender class="com.ubsc.at.properties.Log4JCustomAppender" name="CUSTAPPEN">
    <layout class="org.apache.log4j.PatternLayout">
         <param value="%m" name="ConversionPattern" />
      </layout>
      </appender>

   <appender class="org.apache.log4j.AsyncAppender" name="ASYNC">
     <param name="Blocking" value="false"/>
     <param name="BufferSize" value="512"/>
      <appender-ref ref="CUSTAPPEN" />
   </appender>

   <root>
      <level value="${logLevel}" />
      <appender-ref ref="FILE" />
      <appender-ref ref="ASYNC" />
   </root>
</log4j:configuration>

jetty サーバーの起動中に、以下に示す問題が発生します。

java.lang.ClassNotFoundException: com.ubsc.at.properties.Log4JCustomAppender
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198)

これは、カスタム Appender クラスよりもかなり前に log4j.xml がロードされるためだと思いますか??

とにかく、サーバーの起動中にこのクラスのロードをスキップできるように、クラス レベルのフィルタリングを適用できますか。

よろしくお願いします。

4

1 に答える 1

1

という名前のファイルでは、これを避けることはできませんlog4j.xml。これは log4j 構成ファイルのデフォルト名であるため、初期化しようとしているのはおそらくあなた以外の Log4J インストールです。

ここにいくつかの解決策があります:

  1. Spring を使用している場合は、Log4jConfigListenerを使用して log4jに名前を変更log4j.xmlして構成できます。log4j-myapp.xml
  2. Spring を使用していない場合はLog4jConfigListener、Spring に触発された独自のものを作成できます。
  3. アペンダーを別の JAR にパッケージ化し、その JAR をサーバーの共有ライブラリに配置します。
于 2013-06-28T19:15:57.297 に答える