2

log4cxx の構成は、次の方法で後続の xml から読み取られます。

DOMConfigurator::configure("log4cxx.xml");

しかし、実行時にファイル名を設定したい場合、これにより、読み取り用に複数の .xml を使用するか、オンザフライで (メモリ内/ディスク上の場所に関係なく) 作成するという問題が発生します。

  <appender name="appxNormalAppender" class="org.apache.log4j.FileAppender">
    <param name="file" value="appxLogFile.log" />
    <param name="append" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5p [%t:%x] %C{2} (%F:%L) - %m%n" />
    </layout>
  </appender>

構成して変更した後、代用する<param file="file" value="%%value%%" />か、プロパティにアクセスするために、コンフィギュレーターにいくつかの値を渡す方法はありますか?

PSこれを行う理由:同じプログラムの複数のコピーが同じログに書き込んでいて、見た目が奇妙です。あまり自転車を発明せずに伝統的な方法で log4j/log4cxx でこれを回避するにはどうすればよいですか?

4

1 に答える 1

0

この問題は約2年前に私を襲いました。私はもうソースコードにアクセスできませんが、多かれ少なかれ私がしたことは次のとおりです。

  1. FileAppenderを拡張し、構成ファイルで使用しました。
  2. メソッド内でsetFile()、ファイル名にプロセス名とIDを追加しました(setOption()ローリングファイルを使用しない場合は、メソッドで追加できます。

プロセスとそのインスタンスを内部IDで一意に識別するメカニズムはすでにありました。たとえば、PIDを使用するか、グローバル変数を追加して、log4cxxを使用するすべてのアプリケーションで一意の値に設定し、それをアペンダーのsetOptionメソッドで使用することができます。

私の答えも参照してください:log4CXXでLog4jCompositeTriggeringPolicy機能を使用する

于 2011-09-29T17:51:36.870 に答える