JUnit テスト ケース用に log4j を構成したいと考えています。テストは複数のファイルに分散されていますが、log4j の設定は同じです。どこでできますか?
log4j プロパティ ファイルを使用したくありません。
うまくいくように見える私の解決策。
Log4j システムを拡張するカスタム クラスを作成する
public class myLogger extends Logger { ... スタッフ ...
}
「もの」については、次を実装する必要があります(または少なくとも私は実装しました)
ある種のパブリック myLogger (文字列名) のコンストラクター
.. myLogger の静的メンバーを含める/含める必要がある各クラスで
private static final myLogger errorLog = new myLogger("nameOfClassOrWhateverNameYouFancy")
すべてのクラスで同じ名前を使用すると、同じログ インスタンスにログが記録されます (これはおそらく既にご存じでしょう)。
myLogger クラスに戻って、ログレベルを設定するためのメソッドを実装する必要があります (これが私が行った方法です...)
/**
*
* The add(int i, String s) method
* @param s the message string
*
* @param i used in the switch to create the required level of debug
* @param s the message to send
*
* use this method to create a log message of any required level
* The levels are as follows:
* 1 debug - used during production
* 2 info - may be used for messages to user
* 3 warn - warnings for requesting users re-enter information (data type checking etc)
* 4 error - programmatic / user error may result in unexpected output
* 5 fatal - severe error (comms error) the system will terminate, cleanly if possible, current state will be written to file
*
* Prior to all this however the method determines the calling class of itself
*
*/
public void add(int i, String s)
{
switch (i)
{
case 1: log.debug(s);break;
case 2: log.info(s);break;
case 3: log.warn(s);break;
case 4: log.error(s);break;
case 5: log.fatal(s);break;
}
}
「奇妙なもの」の特定のログ インスタンスが必要な場合は、前に述べたように 2 つのオプションがあります。名前付きロガーに静的メンバーを作成するか、myLogger クラスに静的メンバーを追加することができます (これが私の方法です)。それをやった)。
次に、これらの静的メンバーごとに、おそらく一意の
set[nameOfLogger](int i, string s)
これは基本的に上記の方法と同じ種類の構造を持っています。
呼び出したクラスから呼び出したい場合
myLogger.set[nameOfLogger](1, "s")
そしてあなたは離れています。
次に、ログ レベル (DEBUG、WARN など) とメッセージの送信先 (コンソール、ファイルなど) に関する情報を log4j.properties (私が使用) または log4j.xml に追加する必要があります。
静的な名前付きロガーの設定に関する行が rootLogger のインスタンスの後にあることを忘れないでください。
私はかなり長い間これと戦い、今日ようやく機能するようになったので、かなり広範な説明だと思うものを含めました!
私は今幸せなバニーです....何か他のものを壊すまで;)
デビッド
申し訳ありませんが、log4j.properties ファイルを使用したくないことに気付きました。特に理由は?
だけじゃないなら
import org.apache.log4j.Logger;
ロギング インスタンスを作成する
private Logger jUnitTestingLogger;
次に、さまざまなメソッド呼び出しを使用して出力を設定します (特に追加アペンダーを考えています)。このように行ったことがないので、方法がわかりません!
興味深いことに、インスタンスに適した assertLog(boolean assertion, string message) メソッドがあります。