【问题标题】:How to include Log4j2 messages in TestNG reporting如何在 TestNG 报告中包含 Log4j2 消息
【发布时间】:2014-12-16 10:49:59
【问题描述】:

我希望在所有测试用例的 TestNG 报告中提供 Log4j2 日志记录信息。

TestNG 使用一个名为 Reporter.java 的特殊记录器类,它跟踪日志输出并将其保存在其结果 XML 中。

在 log4j 中,可以简单地创建一个路由到 Reporter 并注册它的 appender 实现。

使用 Log4j2 中的新 Logger API,很难找到有关如何完成此操作的信息。我有一些信息可以使用 Log4j 而不是使用 Log4j2 来完成。

【问题讨论】:

标签: java automated-tests testng log4j2


【解决方案1】:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

在 pom.xml 中添加这个

<dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
        <scope>compile</scope>
    </dependency>

那么你可以使用 log.info 或 log.error 等...

【讨论】:

  • 问题是关于log4j2
  • 哦,我以为两者都一样...对不起
【解决方案2】:

据我所知,您只需要实现一个简单的 Appender。比如:

@Plugin(name="Reporter", category ="Core", elementType="appender", printObject=true)
public class ReporterAppender extends AbstractAppender {

    private ReporterAppender(final String name, final Layout layout) {
        super(name, null, layout, false);
    }

    @Override
    public void append(final LogEvent event) {
        final Layout<? extends Serializable> layout = getLayout();
        if (layout != null && layout instanceof AbstractStringLayout) {
             Reporter.log(((AbstractStringLayout) layout).toSerializable(event));
        } else {
             Reporter.log(event.getMessage().getFormattedMessage();            }

    @PluginFactory
    public static ReporterAppender createAppender(
        @PluginAttribute("name") @Required(message = "A name for the Appender must be specified") final String name,
        @PluginElement("Layout") Layout<? extends Serializable> layout) {
        return new ReporterAppender(name, layout);
    }
}

【讨论】:

  • 同意,拉尔夫的回答值得奖励。
猜你喜欢
  • 2018-11-23
  • 2012-02-14
  • 2020-02-17
  • 1970-01-01
  • 2023-03-04
  • 2020-09-17
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
相关资源
最近更新 更多