2010-12-07 13 views
4

私はlog4jを使い始めましたので、やさしくしてください。しかし、ここで何が起きているのか分かりません。ファイルに正しくロギングしていますが、作成されたログのファイル名が間違っているようです。ここでLog4jは指定されたファイル名の代わりにlog4j.logにログします

は私のlog4jの設定です:

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

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

<appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}] [%-5p] (%t) [%c{1}] %m%n"/> 
    </layout> 
</appender> 


<appender name="file" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="log/messagecount.log" /> 
    <param name="Append" value="true" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}] [%-5p] (%t) [%c{1}] - %m%n"/> 
    </layout>   
</appender>  

<root> 
    <level value="debug"/>  
    <appender-ref ref="file"/> 
    <!-- <appender-ref ref="rolling"/> --> 
</root> 

</log4j:configuration> 

それは代わりにmessagecount.logファイルのログフォルダの下にlog4j.logファイルを作成します。 その値のプロパティは、私がそれがしていると思わないものですか?

これは私がロガーを初期化する方法である:

クラスレベルの変数:

private static Logger logger = Logger.getLogger(MessageCount.class); 

そして、init関数:

private void initLogger() throws IOException { 

    Properties props = new Properties(); 
    props.load(getClass().getResourceAsStream("/log4j.xml")); 
    PropertyConfigurator.configure(props); 

    logger.info("----------Logger init-----------") ; 

//  logger.debug("Sample debug message"); 
//  logger.info("Sample info message"); 
//  logger.warn("Sample warn message"); 
//  logger.error("Sample error message"); 
//  logger.fatal("Sample fatal message"); 

} 

のlog4j.xml設定ファイルは、のルートにあります私のsrcフォルダ。

は、このファイルが有効なXMLでないためにlog4jを設定すると、エラーがスローされ、スタータのため、あなた

+1

init関数は必要ありません。消して。アプリケーションのクラスパス(binフォルダまたはbuildフォルダに 'log4j.xml')を置くだけで、srcフォルダには見つかりません。アプリケーションは自動的にそれを見つけます。 – darioo

答えて

0

ありがとうございました!ここで何が起きているのですか?最初にdariooとdogbaneに答えていただきたいと思います。

init関数は必要ありません。また、JVMパラメータとして-Dlog4j.debug = trueを使用すると、binフォルダにあるxml設定ファイルのコピーが既にロードされていることがわかりました。

したがって、私はinit関数を取り除き、正しい config xmlをbinフォルダに置きます。

0

は、私はあなたのxmlファイルのコピー&ペーストを作っありがとうございます。追加するのを忘れました

</log4j:configuration> 

最終行に追加しました。これがあなたの問題の原因となったのでしょうか?

これを修正すると、log4jが正常に起動し、log/messagecount.logという名前のファイルが正しく作成されます。

私はlog4j 1.2.15を使用しています。設定が同じでない場合は、log4jバージョンと環境を投稿してみてください。また、ファイルの名前をlog/somelog.log、またはsomelog.logと違う名前にして、log4jの動作を確認してください。

+0

おっと!コピー・ペースト・エラー。また、今日私はlog4jをウェブサイトから持っていたので、バージョン1.2.16です。 – CrazyPenguin

+0

@Matthew:1.2.16で試しました。結果は同じです。あなたの環境に関する詳細情報を投稿してください。 – darioo

+0

@Nathan:良い点。新しいプロジェクトでは、私はいつも[slf4j](http://www.slf4j.org/)+ [logback](http://logback.qos.ch/index.html)をお勧めします。 – darioo

2

私のために働きます。

log4jが何をしているのか、ログになぜlog4j.logが記録されているのかについて詳しくは、-Dlog4j.debug=trueをJVMパラメータに追加してみてください。

関連する問題