我们有一个测试框架(仪表)设置,我们使用 slf4j 和 log4j 进行日志记录。最近我们为报告目的实施了报告门户,它按预期工作。它显示已执行、通过、失败的案例,并且失败案例已在其中显示日志。
我遵循了这个:“https://github.com/reportportal/logger-java-log4j”,我在其中配置了 log4j2.xml 文件,如图所示,但日志没有反映在报告门户中。我可以通过更改 log4j2.xml 文件中的附加程序在控制台中打印日志。所以我猜我的设置有问题。
这是 log4j2.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration packages="com.epam.ta.reportportal.log4j.appender">
<properties>
<property name="pattern">[%d{HH:mm:ss}] %-5p (%F:%L) - %m%n</property>
</properties>
<appenders>
<ReportPortalLog4j2Appender name="ReportPortalAppender">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</ReportPortalLog4j2Appender>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="ReportPortalAppender"/>
</root>
</loggers>
</configuration>
我添加了以下 maven 依赖项 - slf4j-api、logger-java-log4j、-slf4j-impl、log4j-api、log4j-core
让我知道是否需要提供更多调试细节。
更新:问题没有解决 我已经放弃了;但在相当长的一段时间后不得不回来。这次我做了一些改变,也没有帮助。 这是我使用的记录器类:
public class AutomationLogger {
private Logger logger;
public static AutomationLogger getLogger(Class loggerClass) {
return new AutomationLogger(loggerClass);
}
private AutomationLogger(Class loggerClass) {
logger = LoggerFactory.getLogger(loggerClass);
}
public void debug(String log, Object... objects) {
log = MessageFormat.format(Thread.currentThread().getStackTrace()[2].getLineNumber() + " - Thread-" + Thread.currentThread().getId() + " [Scenario: {0}] Message: {1} Objects: {2}", Helper.getScenarioNameFromScenarioStore(), log, Arrays.toString(objects));
logger.debug(log);
}
public void info(String log, Object... objects) {
log = MessageFormat.format(Thread.currentThread().getStackTrace()[2].getLineNumber() + " - Thread-" + Thread.currentThread().getId() + " [Scenario: {0}] Message: {1} Objects: {2}", Helper.getScenarioNameFromScenarioStore(), log, Arrays.toString(objects));
logger.info(log);
}
public void error(String log, Object... objects) {
log = MessageFormat.format(Thread.currentThread().getStackTrace()[2].getLineNumber() + " - Thread-" + Thread.currentThread().getId() + " [Scenario: {0}] Message: {1} Objects: {2}", Helper.getScenarioNameFromScenarioStore(), log, Arrays.toString(objects));
logger.error(log);
}
}
这是 log4j.properties 文件:
# Root logger option
log4j.rootLogger=DEBUG, console
# Direct log messages to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%m%n
# Log messages to Report Portal
log4j.appender.reportportal=com.epam.ta.reportportal.log4j.appender.ReportPortalAppender
log4j.appender.reportportal.layout=org.apache.log4j.PatternLayout
log4j.appender.reportportal.layout.ConversionPattern=[%d{HH:mm:ss}] %-5p (%F:%L) - %m%n
我在 pom.xml 中添加了一个侦听器和更多依赖项(这些都添加在正确的位置,这里我只是无序粘贴它们):
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>bintray-epam-reportportal</id>
<name>bintray</name>
<url>http://dl.bintray.com/epam/reportportal</url>
</repository>
<dependency>
<groupId>com.epam.reportportal</groupId>
<artifactId>agent-java-testng</artifactId>
<version>5.0.9</version>
</dependency>
<dependency>
<groupId>com.epam.reportportal</groupId>
<artifactId>logger-java-log4j</artifactId>
<version>5.0.3</version>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<properties>
<property>
<name>usedefaultlisteners</name>
<value>false</value> <!-- disabling default listeners is optional -->
</property>
<property>
<name>listener</name>
<value>com.epam.reportportal.testng.ReportPortalTestNGListener</value>
</property>
</properties>
</configuration>
</plugin>
我在测试中使用记录器,如下所示:
AUTOMATION_LOGGER.info("Key=> " + key, "\nExpected Value: " + expectedMap.get(key) + "\nActual Value: " + actualMap.get(key));
我仍然没有看到登录报告门户。只有堆栈跟踪被打印。'AUTOMATION_LOGGER' 语句不会在报告门户中打印。请建议还需要什么。
谢谢,拉胡尔