Log4j -在日志文件中打印测试用例名称

qnakjoqk  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(132)

我有一个java项目,它使用log4j作为记录器。要求是在日志文件中打印测试用例名称。
在一个类中有多个测试,项目也支持并行执行。为每个测试创建一个记录器示例。
我使用system.Setproprty将我当前的记录器示例与一个测试用例名称相关联。下面是我的log4j.properties文件:-

log4j.appender.logFileAppender.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} [%t] ${testCaseName} %5p (%F:%L) - %m%n
log4j.appender.logFileAppender.Append=false
log4j.appender.logFileAppender.file=./log/UITest.log

在创建日志文件的新示例时,将设置运行时变量${testCaseName},如下所示:

public Logger log; 
public synchronized Logger initializeLogger(String testName) 
    { 
    log = LoggerFactory.getLogger(testName);      
    System.setProperty("testCaseName", testName);             
    PropertyConfigurator.configure(log4jPropertiesFilePath); 
    return log; 
    }

上面的looger示例创建方法在@BeforeMethod中调用。
当前记录器文件正在打印类中最后一个测试的测试名称(在非并行和并行执行模式下)
请帮助我确定多个测试用例没有在日志文件中打印其测试用例名称的问题。

vshtjzan

vshtjzan1#

尝试将此添加到测试中

@Rule 
  public TestName testName = new TestName();

  @Before 
  public void printTestName() {
     System.out.println("Running ==> " + testName.getMethodName()); 
  }
ijnw1ujt

ijnw1ujt2#

您可以做的是设置一个thead上下文变量,并在log4j配置文件中使用此变量名。
在java方法级代码中,将testName保存到线程上下文“testCaseName”中。

import org.apache.logging.log4j.ThreadContext;

       ThreadContext.put("testCaseName", testName);

在log4j2配置中,通过添加以下行来打印线程上下文变量:${ctx:testCaseName}]
对我很有效,祝你好运。

相关问题