使用Java,使用TestNG或JUnit,如果您想将测试期间收集的一些信息记录到文件中,并让每个测试类(例如 TestClass1.class )保持单独的输出像这样以类命名的文件:
TestClass1.log
你会如何实现这种事情?我知道log4j可以在单个文件的“每行”输出中记录类名,但我希望每个类的输出都在单独的文件中。此外,log4j可以根据包名称将输出记录到不同的文件。这些解决方案都不是我想要的,因为我想要数百个测试来创建数百个日志文件。
答案 0 :(得分:0)
使用Log4J 1.x,您必须手动实例化每个类中的Logger,使用套件名称和类名称的组合为每个测试提供唯一的文件名(假设每个套件都有唯一的名称)。 / p>
例如,在测试类的setUp()
方法中,定义日志文件的名称:
String logFilename = context.getSuite().getName() + "_" + this.getClass().getSimpleName();
然后在测试使用的每个类中,手动实例化记录器并提供要使用的日志文件的名称:
public class SomeClass {
private Logger log = null;
public SomeClass(String logFilename) {
log = Logger.getLogger(logFilename);
}
但是这个解决方案并不是很优雅,它需要将文件名传递给测试中使用的所有类。
更好的解决方案:
如果您可以升级到Log4J 2,它支持使用ThreadContext
写入单独的日志文件:
http://logging.apache.org/log4j/2.x/faq.html#separate_log_files
我还发现这篇博文建议使用LOGBack及其映射诊断上下文:http://www.nullin.com/2010/07/28/logging-tests-to-separate-files/