正如在这个链接中所讨论的:如何在log4j中创建自己的Appender?
为了在log4j 1.x中创建自定义appender,我们必须扩展AppenderSkeleton类并实现其append方法.
类似地我们如何在log4j2中创建自定义appender,因为我们没有扩展AppenderSkelton类,所有其他appender扩展AppenderBase类.
我有一些在 TestNG 中并行运行的 WebDriver 测试。而且我希望能够将日志记录到一个单独的文件中,以便在这样的目录结构中运行的每个测试:
target\logs\TestNGSuiteName(SuiteStartTime)
Test1ClassName.TestMethod1 (TestStartTime).log
Test1ClassName.TestMethod2 (TestStartTime).log
Run Code Online (Sandbox Code Playgroud)
等等。
使用 Log4j 和 SLF4j 是否可以为每个单独的 TestNG 测试创建单独的日志文件?
我曾尝试使用 RollingFileAppender,但它看起来不像是为像我在这里尝试做的那样为单独的日志文件运行单独的实例而设计的。
我收到了错误
ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile.
Unable to create Appender of type RollingFile.
Run Code Online (Sandbox Code Playgroud)
Log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Routing name="Routing">
<Routes pattern="$${ctx:ROUTINGKEY}">
<Route>
<RollingFile name="Rolling-${ctx:ROUTINGKEY}"
fileName="target/logs/${ctx:suiteTimestamp}/${ctx:testName} (${ctx:testStartTime}).log"
filePattern="target/logs/${ctx:testname} ${ctx:testStartTime}_%i.log.gz">
<PatternLayout>
<pattern>%d{HH:mm:ss.SSS} [%t] %p %c{3} - %m%n</pattern>
</PatternLayout>
<Policies> <!-- 6 hour rollover-->
<TimeBasedTriggeringPolicy interval="6" modulate="true"/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
</RollingFile>
</Route>
</Routes> …Run Code Online (Sandbox Code Playgroud)