如何编写测试用例以验证log4j日志是否以适当的格式生成

时间:2015-07-07 11:52:02

标签: java testing junit automated-tests integration-testing

我想编写一个testng测试用例来验证生成的日志(log4j)是否完全遵循log4j.properties文件中给定的转换模式。例如,如果我有转换模式:[%d] %-5p [%t]: %m%n示例日志看起来像[2015-07-07 16:42:09,937] DEBUG [main]: Message 1我想确保日志遵循确切的模式。

所以我现在正在做的是首先读取所有登录到String数组的日志并循环该数组,以查找记录中是否包含没有日期DEBUG [main]: Message 1的预期日志。

这种测试日志记录的方式是否正确? 如果您对测试日志的好方法有任何想法,请指出。

2 个答案:

答案 0 :(得分:0)

有任何解决方案。我心中的第一个是:

log4j配置为在System.out上撰写并使用SystemOutRule

public void MyTest {
 @Rule
 public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();

 @Test
 public void writesTextToSystemOut() {
   System.out.print("hello world");
   assertEquals("hello world", systemOutRule.getLog());
 }
}

请参阅:https://stefanbirkner.github.io/system-rules/index.html

如果记录器写入System.out和/或System.err,此解决方案独立于记录器实现。

答案 1 :(得分:0)

更多log4J知道:

使用模拟框架 - @slartidan说 - 并模拟appender实现。

根据您首选的模拟框架和log4J 1.xlog4J 2.x,解决方案完全不同。

Log4J 1.2

创建一个模拟记录器appender并在logger上添加此appender: Logger.getLogger("...").addAppender( mockedAppender );

请参阅:http://getbootstrap.com/components/#glyphicons-how-to-use

Log4J 2.x

扩展ConfigurationFactoryConfiguration(仅限于测试人工制品)并添加模拟的appender。

  

创建自定义配置的最简单方法是扩展其中一个标准配置类(XMLConfiguration,JSONConfiguration),然后为扩展类创建一个新的ConfigurationFactory。标准配置完成后,可以将自定义配置添加到其中。

https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Category.html#addAppender%28org.apache.log4j.Appender%29(包括完整示例)