0

JUnit テスト ケース用に log4j を構成したいと考えています。テストは複数のファイルに分散されていますが、log4j の設定は同じです。どこでできますか?

log4j プロパティ ファイルを使用したくありません。

4

1 に答える 1

0

うまくいくように見える私の解決策。

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) メソッドがあります。

于 2012-06-28T15:00:15.653 に答える