当前位置: 首页 > 知识库问答 >
问题:

与log4j2集成后未反映在报表门户中的日志

方和宜
2023-03-14

我们有一个测试框架(gauge)设置,我们使用slf4j和log4j进行日志记录。最近,我们实现了用于报告目的的报告门户,它可以按预期工作。它显示已执行、已通过、已失败的案例以及其中显示有日志的失败案例。

我是这样说的:https://github.com/reportportal/logger-java-log4j“其中,我配置了如图所示的log4j2.xml文件,但日志没有反映在报表门户中。不过,我可以通过更改log4j2.xml文件中的appender在控制台中打印日志。因此,我猜我的设置有问题。

这是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依赖项-slf4japi、logger-java-log4j、-slf4j impl、log4japi、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。属性文件:

# 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”语句不会在报表门户中打印。请建议还需要什么。

谢谢,拉胡尔

共有2个答案

桂高昂
2023-03-14

如果您正在使用版本为4.0.2logger-java-log4j(第四版RP的最后一个版本)以及Log4j2,请确保:

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

RP的第5版也是如此。

令狐声
2023-03-14

上面log4j文件看起来还行,

请检查:

  1. 为此执行配置的BaseTestNGListener
  2. reportportal。资源上存在具有所有相关详细信息的属性文件
 类似资料:
  • 我正在研究一种方法,将报告日志发送到报告门户,并附上屏幕截图。我正在使用XmlHttpRequest模块访问报表门户日志endpoint。这是我的密码。但是这段代码不起作用,相反,我得到了一条“json\u请求\u部分丢失”的响应消息。我做错了什么,我是按照这里的文件做的

  • 我有一个使用Log4j和Velocity V1.7的web应用程序 这就是我如何集成Log4j和Velocity1.7 显然,没有与log4j2兼容的Log4JLogChute的等价物。 有人知道如何实现Log4j2和velocity之间的兼容性吗?

  • 我从log4j1迁移过来。x到log4j2。我删除了log4j。属性文件并创建了log4j2。xml文件。迁移后,我运行了应用程序,但找不到。日志文件。 有没有人能告诉我

  • 问题内容: 我试图用AngularJS创建一些自定义元素并将一些事件绑定到它,然后我注意到$ scope.var在绑定函数中使用时不会更新UI。 这是描述探针的简化示例: HTML: JS: 演示:http : //plnkr.co/edit/g3S56xez6Q90mjbFogkL?p=preview 基本上,我将事件绑定到用户并想要在用户单击按钮B时进行更改(类似于按钮A上的更改)。但是如果我

  • 我想使用Cognito用户池作为标识提供者。我对我的用户进行身份验证。然后,我尝试通过以下步骤将该用户与用户池中的用户集成: http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-integration-user-pools-with-identity-pools.html 我已经用绳子代替了敏感的部分。我已

  • 我对Laravel 5中的这种集成有一个问题: JasperPHP. php第178行中的异常:您的报告有错误,无法处理!尝试使用函数输出命令,并在控制台中手动运行它。 发生异常的代码: