JUnitテストを使用したLog4J

ダニエル・コーエン

SeleniumJavaテストにログを追加したいと思います。log4jFrameworkを実装しました。これは、ログをコンソールまたはファイルに配置することでうまく機能します。

JUnitテストフレームワークを使用していますが、ファイルがすでに存在する場合にファイルの先頭に+1を付けるという標準的な規則を使用するのではなく、ログファイルのファイル名にテスト名と日付/時刻を含めたいと思います。 。

これは私のlog4j.propertiesファイルです...

log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.File=~/Desktop/Selenium/AutomationLogs/automationLog
log4j.appender.rollingFile.MaxFileSize=2MB
log4j.appender.rollingFile.MaxBackupIndex=2
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss} %p %t %c - %m%n

私がオンラインで見つけたものは、毎日のローリングファイルにのみ関連しているようです。単体テストを実行するたびに、ログ用の新しいファイルを生成したい

Itay Maman

私があなたのニーズを正しく理解している場合、これは以下を組み合わせることによって達成することができます:

  • 現在のメソッドの名前を提供するJUnitメソッドルールを使用する
  • 実行時にLog4jアペンダーを作成し、取得したメソッドの名前で構成します。

具体的には、カスタムJUnitルールを作成する必要があります。私はTestWatcherそれが最も適切であると思われるので拡張することを選びました

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;

public class TestMethodLogging extends TestWatcher {
  private static final String date = new SimpleDateFormat("y-MM-dd")
      .format(new Date());
  private Logger logger;

  @Override
  protected void starting(Description description) {
    String name = description.getMethodName();
    RollingFileAppender a = (RollingFileAppender) Logger.getRootLogger()
        .getAppender("rollingFile");
    PatternLayout layout = new PatternLayout();
    layout.setConversionPattern("%d{dd MMM yyyy HH:mm:ss} %p %t %c - %m%n");

    try {
      File logDir = new File(a.getFile()).getParentFile();
      File logFile = new File(logDir, name + "_" + date);
      logger = Logger.getLogger(name);
      logger.addAppender(new RollingFileAppender(layout, logFile
          .getAbsolutePath()));
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }

  public Logger getLogger() {
    return logger;
  }
}

これを取得したら、原則としてテストクラス内に配置できます。ルールは、単にテストのフィールドです(@Rule注釈を付けます)。ここで私はそれを呼びましたrule(あまり想像力がありません、私は認めます)。テストメソッドからログを記録するには、を呼び出す必要がありますrule.getLogger()

import static org.junit.Assert.assertEquals;

import org.junit.Rule;
import org.junit.Test;

public class MyTest {
  @Rule
  public TestMethodLogging rule = new TestMethodLogging();

  @Test
  public void sumOfTwoInts() throws Throwable {
    rule.getLogger().error(
        "logging to a logger whose name is based on the test method's name");
    assertEquals(5, 2 + 3);
  }

  @Test
  public void productOfTwoInts() throws Throwable {
    rule.getLogger().error(
        "logging to a logger whose name is based on the test method's name");
    assertEquals(8, 2 * 4);
  }
}

このテストを実行すると、~/Desktop/Selenium/AutomationLogsディレクトリの下に次の2つのファイルが作成されます

productOfTwoInts_2015-05-10  
sumOfTwoInts_2015-05-10

最初のファイルの内容は次のようになります。

$ cat productOfTwoInts_2015-05-10 
10 May 2015 19:59:58 ERROR main productOfTwoInts - logging to a logger whose name is based on the test method's name
10 May 2015 20:01:22 ERROR main productOfTwoInts - logging to a logger whose name is based on the test method's name
10 May 2015 20:01:24 ERROR main productOfTwoInts - logging to a logger whose name is based on the test method's name

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

log4j error()呼び出しをjUnitテストで例外をスローさせる方法は?

分類Dev

bluemix cloudantDBを使用したlog4j

分類Dev

JUnitテストクラスのどこにlog4jを設定しますか?

分類Dev

Log4Jを使用したカテゴリロギング

分類Dev

log4j 2.8.1 を使用した slf4j-log4j ブリッジ

分類Dev

選択したLog4jデバッグステートメントのみを表示する

分類Dev

log4jを使用したレストレットのアクセスログ

分類Dev

log4jを使用してテキストファイルに書き込む方法

分類Dev

Log4jを使用したデータベースへのログイン

分類Dev

警告がlog4jで記録されたことをjunitでテストするにはどうすればよいですか?

分類Dev

ExpressionFilterを使用したlog4j 1.2フィルター例外

分類Dev

Log4jを使用したUber / Fat jarの作成

分類Dev

Log4Jを使用せずにSlf4jによって作成されたログメッセージをテストする

分類Dev

Java / JSP log4j:WARN log4jシステムを適切に初期化してください

分類Dev

Slf4jおよびLog4jを使用したTomcatロギング

分類Dev

log4jでシステムプロパティまたは変数を使用する

分類Dev

TestNG、Junit、log4j

分類Dev

log4jラッパーを使用して、ログステートメントの「ソース」クラスを出力する

分類Dev

log4jを使用したセントリーロギングが機能しない

分類Dev

JMockItを使用してLog4jをユニットテストするにはどうすればよいですか?

分類Dev

DIを介したSpring FrameworkでのLOG4Jの正しい使用法

分類Dev

log4jを使用したコンソールでのクリック可能なクラス名と行番号

分類Dev

Log4Jを使用したSpring Bean初期化のロギング

分類Dev

log4jを使用した複数のログファイル

分類Dev

Log4jを使用したロギングメソッド名の欠点

分類Dev

log4jが例外のスタックトレースを出力しない

分類Dev

Log4jがスタックトレースを出力しない

分類Dev

log4jを介したTomcatアクセスロギング?

分類Dev

例外 log4j:WARN を取得する log4j システムを適切に初期化してください

Related 関連記事

  1. 1

    log4j error()呼び出しをjUnitテストで例外をスローさせる方法は?

  2. 2

    bluemix cloudantDBを使用したlog4j

  3. 3

    JUnitテストクラスのどこにlog4jを設定しますか?

  4. 4

    Log4Jを使用したカテゴリロギング

  5. 5

    log4j 2.8.1 を使用した slf4j-log4j ブリッジ

  6. 6

    選択したLog4jデバッグステートメントのみを表示する

  7. 7

    log4jを使用したレストレットのアクセスログ

  8. 8

    log4jを使用してテキストファイルに書き込む方法

  9. 9

    Log4jを使用したデータベースへのログイン

  10. 10

    警告がlog4jで記録されたことをjunitでテストするにはどうすればよいですか?

  11. 11

    ExpressionFilterを使用したlog4j 1.2フィルター例外

  12. 12

    Log4jを使用したUber / Fat jarの作成

  13. 13

    Log4Jを使用せずにSlf4jによって作成されたログメッセージをテストする

  14. 14

    Java / JSP log4j:WARN log4jシステムを適切に初期化してください

  15. 15

    Slf4jおよびLog4jを使用したTomcatロギング

  16. 16

    log4jでシステムプロパティまたは変数を使用する

  17. 17

    TestNG、Junit、log4j

  18. 18

    log4jラッパーを使用して、ログステートメントの「ソース」クラスを出力する

  19. 19

    log4jを使用したセントリーロギングが機能しない

  20. 20

    JMockItを使用してLog4jをユニットテストするにはどうすればよいですか?

  21. 21

    DIを介したSpring FrameworkでのLOG4Jの正しい使用法

  22. 22

    log4jを使用したコンソールでのクリック可能なクラス名と行番号

  23. 23

    Log4Jを使用したSpring Bean初期化のロギング

  24. 24

    log4jを使用した複数のログファイル

  25. 25

    Log4jを使用したロギングメソッド名の欠点

  26. 26

    log4jが例外のスタックトレースを出力しない

  27. 27

    Log4jがスタックトレースを出力しない

  28. 28

    log4jを介したTomcatアクセスロギング?

  29. 29

    例外 log4j:WARN を取得する log4j システムを適切に初期化してください

ホットタグ

アーカイブ