We have a testing framework (gauge) setup and we use slf4j with log4j for logging. Recently we implemented report portal for reporting purposes and it works as expected. It shows cases executed, passed, failed and failures cases has log shown inside them.
But I can't seem to configure logs to be shown at the launch level.
I followed this: "https://github.com/reportportal/logger-java-log4j" where I configured log4j2.xml file as shown but logs are not getting reflected in report portal. I'm able to print logs in console by changing the appender in log4j2.xml file though. So I'm guessing I'm doing something wrong with the setup.
This is the log4j2.xml file
<?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>
I have added the following maven dependencies - slf4j-api,logger-java-log4j,-slf4j-impl,log4j-api,log4j-core
Let me know if I need to give more details for debugging.
Update: Problem not solved I have given up on this; but after quite sometime have to come back for it. This time I have done some changes, which also did not help. This is the logger class I use:
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);
}
}
This is log4j.properties file:
# 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
I have added a listener and some more dependencies in pom.xml (these are added in correct places, here I'm just pasting them without order):
<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>
I use logger in tests as below:
AUTOMATION_LOGGER.info("Key=> " + key, "\nExpected Value: " + expectedMap.get(key) + "\nActual Value: " + actualMap.get(key));
Still I don't see the log in report portal. Only the stack trace gets printed. The 'AUTOMATION_LOGGER' statements don't get printed in report portal. Please suggest what more is needed.
Thanks, Rahul
Above log4j file looks ok,
please check that: