I am following these solution:
https://github.com/Hakky54/log-captor
https://dzone.com/articles/unit-testing-log-messages-made-easy
i am using
            <groupId>io.github.hakky54</groupId>
            <artifactId>logcaptor</artifactId>
            <version>2.2.0</version>
            <scope>test</scope>
My code is exactly same like:
package com.filter.requeststatistics.writer;
import com.testutil.data.TestDataUtil;
import nl.altindag.log.LogCaptor;
import org.junit.Test;
import java.util.List;
public class StatisticsModuleImplTest {
    @Test
    public void testSuccessCall(){
        RequestStatisticsInput input = TestDataUtil.createFilledTestData(RequestStatisticsInput.class);
        input.getBrandId();
        LogCaptor logCaptor = LogCaptor.forClass(StatisticsModuleImpl.class);
        StatisticsModuleImpl statisticsModule = new StatisticsModuleImpl();
        statisticsModule.writeRequestStatistic(input);
        List<String> infoLogs = logCaptor.getInfoLogs();
        //List<String> logs = logCaptor.getLogs();
        //List<String> debugLogs = logCaptor.getDebugLogs();
        //List errorLogs = logCaptor.getErrorLogs();
        //logs.size();
        //assertThat(logCaptor.getLogs()).containsExactly("a");
    }
but infoLogs size is zero (and also other log types when set are also zero)
my StatisticsModuleImpl class is:
package com.filter.requeststatistics.writer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class StatisticsModuleImpl implements StatisticsModule {
    private static final Logger LOGGER = LogManager.getLogger(StatisticsModuleImpl.class);
    private static final ObjectMapper mapper = new ObjectMapper();
    @Override
    public void writeRequestStatistic(RequestStatisticsInput input) {
        try {
            String jsonString = mapper.writeValueAsString(input);
            LOGGER.info("received request: " + jsonString);
        } catch (JsonProcessingException ignored) {
            // Should never happen, nevertheless we should not stop serving requests if it does.
            LOGGER.error("Exception while trying to log request statistic: " + input.toString(), ignored);
        }
    }
}
I am not able to understand whats the problem ???? All the imports are same. When i debug my test, the field logCaptor.listAppender, there the i dont see any Appenders. My log4j.properties file is:
log4j.rootLogger=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
and log4j2.xml is
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Properties>
        <Property name="log-path">target/logs</Property>
    </Properties>
    <Appenders>
        <Console name="stdout" target="SYSTEM_OUT">
            <PatternLayout pattern=" %-5p %d{ABSOLUTE} %5p %c{1}:%L - %m%n"/>
        </Console>
        <File name="testlogfile" fileName="${log-path}/test.log" append="false">
            <PatternLayout>
                <Pattern>%d{ABSOLUTE} %5p %c{1}:%L - %m%n</Pattern>
            </PatternLayout>
            <ThresholdFilter level="info"  onMatch="ACCEPT" onMismatch="DENY"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="DEBUG" additivity="false" includeLocation="true" >
            <AppenderRef ref="testlogfile"/> 
            <AppenderRef ref="stdout"/> 
        </Root>
    </Loggers>
</Configuration>
                It looks like LogCaptor is missing an adapter to have it working with apache logger. I will publish a fix this week, for the time being you can add the following dependency and that should do the trick:
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
    <version>2.14.0</version>
    <scope>test</scope>
</dependency>
I will update this answer when the fix is published.
============= UPDATE #1 =============
You don't need the workaround which I shared above. The fix is present in the latest version. Could you bump it to 2.3.1 or use the latest version from here: Maven Central, retry it and share your results here?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With