log4j とそれを実装できるさまざまな方法に関する stackoverflow の投稿を読むのに多くの時間を費やしました。log4j.properties のアプローチを取ることにしました。eclipse 内または ant から実行すると、次のような問題が発生します。
log4j:WARN No appenders could be found for logger (My.Class).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
これまでに次の2つのことを行いました。
- /src フォルダーのルートに log4j.properties ファイルを作成しました
- log4j.properties ファイルを、.java ファイルが存在するパッケージに移動しました。
両方のインスタンスで同じ問題が発生します。クラスで使用しているコードは次のとおりです。
private static Logger log = Logger.getLogger(My.class);
プロパティファイルがクラスパスにある必要があることを何度も読みました。私はそれをやったような気がしますが、そうではないかもしれません。これが私のパッケージ構造です:
ソース
パッケージA
myclass.java
log4j.properties (試行 2)
パッケージB
- パッケージC
- パッケージD
- log4j.properties (試行 1)
すべてのパッケージ内のすべての Java ファイルで同じ log4j.properties を使用したいと思います。props ファイルを重複して処理する以外に、これを構成する簡単な方法がある場合は、お知らせください。リソースローダーの使用に切り替える必要があると考えていました。
私のアリの問題に移ります:
私はantでまったく同じ問題を抱えています。Apacheのサイトで読んだものから必要だと思ったものを追加して、antを問題なく実行できるようにしましたが、役に立ちませんでした。
ここに私のコンパイルターゲットの追加エントリがあります...
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar">
<include name="**/*.properties"/>
</fileset>
</path>
<target>
<javac srcdir="${source.dir}" destdir="${classes.dir}" classpathref="classpath" debug="true" debuglevel="lines,vars,source" includeAntRuntime="false"/>
<copy todir="${classes.dir}">
<fileset dir="${source.dir}" excludes="**/*.java"/>
</copy>
</target>
私のjunitターゲットにはクラスパスが含まれていることにも注意してください。
-Dlog4j.configuration=file:/path をファイルに追加しようとしましたが、その後も警告が表示されます...途方に暮れています。
これにより、.properties ファイルが ant のクラスパスにコピーされるという印象を受けました。