0

我们有一个测试框架(仪表)设置,我们使用 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-apilogger-java-log4j-slf4j-impllog4j-apilog4j-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' 语句不会在报告门户中打印。请建议还需要什么。

谢谢,拉胡尔

4

2 回答 2

0

如果您使用logger-java-log4j的版本4.0.2(RP 的第四版剩下的最后一个)与 Log4j2 一起使用,请确保:

  1. 您正在使用手册中的配置(packages配置节点内的属性是必不可少的): https ://github.com/reportportal/logger-java-log4j#xml
  2. 您的 Log4j2 版本大于或等于:2.12.1

第 5 版 RP 也是如此。

于 2020-10-22T10:11:58.197 回答
0

上面的 log4j 文件看起来不错,

请检查:

  1. 为此执行配置的 BaseTestNGListener
  2. 资源上存在reportportal.properties 文件,其中包含所有相关详细信息。
于 2020-10-20T09:58:28.287 回答