2011-01-07 36 views
2

Antで実行中にEclipseのコンソールに正しく表示されるようにApache log4jでログを取得しようとしましたが、運がない。私はデバッグの優先順位とConsoleAppenderを持つ基本的なルートロガーを持っている動作しているlog4j.xml設定を持っています。私はプロジェクトからlog4j.xmlを削除すると、Antターゲットはlog4j設定が欠落していると不平を言ってしまうため、ロガーが動作することを確認しました。アペンダーをファイルアペンダーに切り替えると、すべての出力が適切にファイルに送られます。それをコンソールに戻すと、標準のAnt出力以外はEclipseコンソールには何も得られません。Antで実行しているときにEclipseコンソールでLog4jメッセージが失われた

私のJUnitテストではlog4jメッセージが出力されていますが、私はそれらをバッチで実行し、それらのプロセスをforkしているためです。

コマンドラインでまったく同じAntスクリプトを変更せずに実行すると、Log4jの出力がAnt出力とインターレースされることが予想されます。私のMac 10.6 Intel 64マシンで、Eclipse HeliosでAnt 1.7.1を実行しています。私はこれもHeliosを実行しているWindows XPマシン上の問題であることを確認しました。私は自分のコンソールアペンダー設定で「follow」をtrueに設定しようとしましたが、これは役に立たなかった。

私はコードスニペットを提供することができますが、私が言及したように、私はlog4jが正しく構成されていることを証明しました。そして、log4j.xmlがクラスパス上で取得され、ロギングが実行され出力されています。 AntにEclipseを統合する方法と関係があります。他の誰かがこれを体験していますか?これはEclipseプロジェクトに提出するものなのでしょうか?

+0

も参照してください:http://stackoverflow.com/questions/3501355/log4j-output-not-displayed-in-eclipse-console –

+0

これは直接的な回答ではなく、関連性があるかどうかはわかりません。私がEclipseコンソールで気づいた問題の1つは、他のほとんどのコンソールとは異なり、System.out(またはSystem.err)上で明示的な 'flush()'が呼び出されるまではメッセージを出力しないということです。可能であれば、メッセージをロギングした後でflush()を試してください(もちろんこれは永久的な解決策ではありません)。 –

+0

@Martin - 私のJUnitはすべてのレベルで正しく出力されますが、これは私が定義したカスタムtaskdefのようです。私は戻ってタスクとしてこれを実行し、代わりに私のカスタムAntタスクを通して何が起こるかを見ていくつもりです。 –

答えて

0

antを介して実行されるJavaタスクは、標準出力とエラーをメインのantの出力に送信しません。

Ant Java taskoutputerrori/o redirectorsを見ましたか?

+0

私は何とかしばらく前にこの問題を解決しましたが、決して質問を更新しませんでした。あなたが提案したリダイレクタに関連していると思います。 –

0

私は同様の問題がありましたが、Eclipseはjunitメッセージまたはlog4jを記録していませんでした。 junitログメッセージを取得するには、フォーマッタを追加することで違いが生じました。これは、テストケースが完了した時点でlog4jメッセージを渡すようです。

私はビルドディレクトリにある設定ファイルを持っていなかったためにlog4jの問題だった
<target name="junit" depends="copy_cfg"> 
     <junit printsummary="on" fork="false" haltonfailure="no"> 
      <classpath refid="MyProject.classpath" /> 
      <formatter type="xml" /> 
      <formatter type="plain" usefile="false" /> <!-- to screen --> 
      <batchtest todir="${test.report.dir}"> 
       <fileset dir="${src.dir}"> 
        <include name="**/*Test.java" /> 
       </fileset> 
      </batchtest> 
     </junit> 
    </target> 

、ANTビルドプロセスの後、私は、ビルド・パスに渡ってそれをコピーして

<!-- copy the config files for junit --> 
<target name="copy_cfg" depends="compile"> 
    <copy file="log4j.xml" todir="${build.dir}" flatten="true"/> 
    <copy file="config.txt" todir="${build.dir}" flatten="true"/> 
</target> 

・ホープ、このことができます誰か。

関連する問題