2011-07-13 11 views
3

これはスタンドアロンのJavaアプリケーションです。log4jはコンソールにログを記録するのはなぜですか?

下記の設定ファイルを使用していますが、2つの問題があります。

1)ログをstdoutに取得していますが、理由がわかりません。

2)私はエラーログだけにエラー以上を指示しようとしていても、エラーログにすべてのログメッセージを表示しています。

Log4j.xmlファイルへの明示的なパスを指定せずにBasicConfiguratorを使用しています。 xmlファイルは私のクラスと同じjarファイルにあります。これらの問題に加えて、適切なログを作成して書き込んでいるため、構成が適用されています。

3)さらに、実行時にlog4j.xmlファイルをjarファイルの外に置くことはできません。それ、どうやったら出来るの?

<!--appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Threshold" value="DEBUG"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%-5p [%F:%L] - %m%n"/> 
    </layout> 
</appender--> 

<!-- working dir is $CATALINA_TMPDIR. send logs to log dir. --> 
<appender name="ROLL" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="/var/log/company/application.log"/> 
    <param name="MaxFileSize" value="5MB"/> 
    <param name="MaxBackupIndex" value="9"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/> 
    </layout> 
</appender> 

<appender name="ERRORLOG" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="/var/log/rocketvox/company/error.log"/> 
    <param name="MaxFileSize" value="5MB"/> 
    <param name="MaxBackupIndex" value="9"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/> 
    </layout> 
</appender> 

<category name="com.company"> 
    <priority value="ALL"/> 
    <appender-ref ref="ROLL"/> 
</category> 

<category name="com.mattx"> 
    <priority value="ALL"/> 
    <appender-ref ref="ROLL"/> 
</category> 

<root> 
    <priority value="error"/> 
    <appender-ref ref="ERRORLOG"/> 
</root> 

+2

['BasicConfigurator'](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/BasicConfigurator.html#BasicConfigurator%28%29)は、[' ConsoleAppender'](http ://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/ConsoleAppender.html) 'System.out'にログイベントを追加します – mre

答えて

3

のlog4jがやっているコンフィギュレーションファイルには使用しています正確に何を見るために、アプリケーションのJVMの引数に-Dlog4j.debugを追加します。

問題がBasicConfigurerを使用しています - log4j.xmlという名前のファイルを使用して設定する場合、デフォルトのlog4j初期化ロジックがlog4j.xmlを選択するように、アプリケーションコードに明示的なlog4j Configurerを使用する必要はありませんxmlが見つからない場合はlog4j.properties)をクラスパスから取得します。

log4jマニュアルのDefault Initialization Procedureを参照してください。

+0

ああありがとう!私は、BasicConfigurator ==デフォルト設定だと仮定していましたが、明らかにデフォルトは静的初期化によって行われます。 – mattx

関連する問題