2012-06-27 103 views
0

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

我不想使用log4j属性文件。

+0

你的意思是什么log4j属性文件...它是log4j.xml? –

+0

是的。我想通过代码配置log4j。 –

+1

为什么你不想使用log4j.xml ....是否有任何具体要求 –

回答

0

我的解决方案,似乎工作。

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

公共类myLogger扩展记录仪 { ...东西...

}

的 '东西',你需要实现(或至少我做过)

某种构造函数 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; 
    } 
} 

现在,如果你想一些具体的登录电子“奇怪的st你有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(布尔断言,字符串消息)方法可能对你有好处。