6

ビルド プロセスの一部として複数のタスク定義に依存するビルド ファイルがあります。これらのタスク定義項目 (webdoclet や jasper2 など) は、log4j をロガーとして使用します。理想的には、それぞれに異なる log4j 構成ファイルを提供できるようにしたいのですが、最低限、どの log4j 構成ファイルを使用するかを指定できるようにしたいと考えています。

以前は機能していたのは、タスク定義で使用する log4j.xml を含むディレクトリをクラスパスの先頭に配置することでした。例えば:

<target name="define.jasper2">
  <path id="jspc.classpath">
      <!-- Jasper が Build ディレクトリで log4j.xml を検出できるように、これを最初に配置します -->
      <pathelement location="ビルド"/>
      <fileset dir="${tomcat.libs}">
             ....
      </ファイルセット>
      <pathelement location="${log4j.jar}"/>
      ....
  </パス>

  <taskdef name="jasper2" classname="org.apache.jasper.JspC" classpathref="jspc.classpath"/>
</ターゲット>

実際、「Build」ディレクトリがクラスパスの先頭にあり、log4j.xml がそのディレクトリに存在することを確認しました。ただし、デバッグで log4j を使用して詳細モードで ant を実行すると、log4j が現在の作業ディレクトリにある log4j.xml を選択していることがわかります。これは、必要なものではありません。Log4j は、デフォルトの log4j.xml を解決するためにクラスパスを使用していないようです。

私は log4j 1.2.8 (より大きなフレームワークに組み込まれているため、アップグレードできません) を使用していますが、これらのタスク定義の一部は commons-logging 1.0.3 に依存しているようです。ビルド プロセスでは、Sun Java 5 を使用します。

antをset ANT_OPTS=-Dlog4j.configuration=Build/log4j.xml実行する前に、タスク定義が目的の log4j.xml を正しくロードします。

以前は機能していた taskdef のクラスパスの先頭に「Build」ディレクトリを置きます。何が変わったのかわからない。build.xml 内で、特定のタスクにどの log4j 構成ファイルを使用するかを制御できる動作を復元するにはどうすればよいですか? ANT_OPTS を設定する以外に、ファイルを再配置してアプリケーションの log4j.xml を現在の作業ディレクトリから移動し、log4j が正しい log4j.xml ファイルを見つけられるようにする方法はありますか?

4

4 に答える 4

4

次のように、相対ファイル URL を使用して構成ファイルを指定できますsysproperty

<java classname="com.lunatech.MainClass">
   <sysproperty key="log4j.configuration" value="file:src/log4j-debug.properties"/>
   <classpath refid="runtime.classpath"/>
</java>
于 2009-08-10T20:32:50.963 に答える
0

ant を実行する前に ANT_OPTS=-Dlog4j.configuration=Build/log4j.xml を設定すると、タスク定義は目的の log4j.xml を正しくロードします。

sysproperty を使用してこのプロパティを設定しようとしましたか?

次のようになります。

<target name="define.jasper2">
   <sysproperty key="log4j.configuration" value="Build/log4j.xml"/>
   ...
</target>
于 2009-01-30T21:21:53.270 に答える