繁体   English   中英

为JUnit配置log4j

[英]Configuring log4j for JUnit

我想为JUnit测试案例配置log4j。 我的测试分散在多个文件中,但是具有相同的log4j设置。 我在哪里可以做?

我不想使用log4j属性文件。

我的解决方案,似乎可行。

编写一个扩展Log4j系统的自定义类

公共类myLogger扩展了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;
    }
}

现在,如果您想为“奇怪的东西”提供一些特定的日志记录实例,则有两个选择,就像我之前说的那样,您可以为命名记录器创建一个静态成员,或者可以将静态成员添加到myLogger类(这就是我的方式)。做到了)。

那么对于这些​​静态成员中的每一个,您可能想要一个唯一的

set[nameOfLogger](int i, string s)

基本上具有与上述方法相同的结构。

现在,如果您想从班级中调用它

myLogger.set[nameOfLogger](1, "s")

而你不在。

然后,您需要将有关日志级别(调试,警告等)以及将消息发送到何处(控制台,文件等)的信息添加到您的log4j.properties(如我所用)或log4j.xml中。

请记住,要确保有关设置静态命名记录器的行出现在rootLogger实例之后,这使我困扰了很长时间!

我花了很长时间才把我认为是相当广泛的说明包括在内,直到今天才完成工作!

我现在是一个快乐的兔子。。。。

大卫

抱歉,您刚刚发现您不想使用log4j.properties文件。 特别是什么原因?

如果不是

import org.apache.log4j.Logger;

创建一个日志记录实例

private Logger jUnitTestingLogger;

然后使用各种方法调用设置输出(我特别考虑添加追加器),我从来没有像这样做过,所以不知道怎么做!

有趣的是,有一个assertLog(boolean assertion,string message)方法可能对您的实例有利。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM