Log4j テスト レポーター アペンダー

TestNG と log4j を使用して Java でテスト自動化フレームワークを開発する場合、TestNG html レポートの「Reporter 出力」セクションに log4j ログを追加できます。この投稿では、それを実現する方法を説明します。

Step 1 - Write a custom log4j appender for testng

public class TestNGReportAppender extends AppenderSkeleton
{

    @Override
    protected void append(final LoggingEvent event)
    {
        Reporter.log(eventToString(event));
    }

    private String eventToString(final LoggingEvent event)
    {
        final StringBuilder result = new StringBuilder(layout.format(event));

        if(layout.ignoresThrowable())
        {
            final String[] s = event.getThrowableStrRep();
            if (s != null)
            {
                for (final String value : s)
                {
                    result.append(value).append(Layout.LINE_SEP);
                }
            }
        }
        return result.toString() + "</br>"; // add a line break since the output is html format
    }

    @Override
    public void close()
    {
    }

    @Override
    public boolean requiresLayout()
    {
        return true;
    }
}

Step 2 - Config log4j properties to use the custom appender

log4j.rootLogger=DEBUG, stdout, R, testNG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=logs/test.log
log4j.appender.R.MaxFileSize=500KB
log4j.appender.R.MaxBackupIndex=3
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

log4j.appender.testNG=com.xxx.TestNGReportAppender
log4j.appender.testNG.layout=org.apache.log4j.PatternLayout
log4j.appender.testNG.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

java automation testng log4j