为JUnit配置log4j

时间:2012-06-27 10:37:46

标签: java junit log4j

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

我不想使用log4j属性文件。

1 个答案:

答案 0 :(得分:0)

我的解决方案似乎有效。

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

公共类myLogger扩展了Logger { ......东西......

}

你需要实现以下(或者至少我做过)的“东西”

某种构造函数     public myLogger(String name)

..在每个类中,您希望/需要包含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;

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

有趣的是,有一个assertLog(布尔断言,字符串消息)方法可能对你的实例有用。