Skip to content

swierkosz/log4j2-captor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

log4j2-captor

A simple Java testing utility for log4j2.

Usage

LogCaptor is the entry point class for the library. It has two public static methods:

  • LogCaptor.forClass(Class<?> type) - Returns an instance of LogCaptor for capturing logs from logger associated with given class.
  • LogCaptor.forName(String name) - Returns an instance of LogCaptor for capturing logs from logger associated with given name.

See javadocs for more information.

Example

import com.github.swierkosz.log4j2.captor.LogCaptor;
import org.apache.logging.log4j.Level;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

import java.util.HashMap;
import java.util.Map;

import static com.github.swierkosz.log4j2.captor.Log.log;
import static org.assertj.core.api.Assertions.assertThat;

class Usage {

    private static final Logger LOG = LoggerFactory.getLogger(Usage.class);
    private final LogCaptor logCaptor = LogCaptor.forClass(Usage.class);

    @AfterEach
    void tearDown() {
        MDC.clear();
    }

    @Test
    void shouldCaptureLogWithoutPlaceholders() {
        // When
        LOG.info("Hello world!");

        // Then
        assertThat(logCaptor).contains(log(Level.INFO, "Hello world!"));
    }

    @Test
    void shouldCaptureLogWithPlaceholder() {
        // When
        LOG.debug("Hello {}!", "world");

        // Then
        assertThat(logCaptor).contains(log(Level.DEBUG, "Hello world!"));
    }

    @Test
    void shouldCaptureLogWithThrowable() {
        // Given
        Throwable throwable = new Throwable();

        // When
        LOG.error("Hello world!", throwable);

        // Then
        assertThat(logCaptor).contains(log(Level.ERROR, "Hello world!", throwable));
    }

    @Test
    void shouldCaptureLogWithMdc() {
        // Given
        MDC.put("key", "value");

        // When
        LOG.error("Hello world!");

        // Then
        assertThat(logCaptor).contains(log(Level.ERROR, "Hello world!", mapWith("key", "value")));
    }

    @Test
    void shouldCaptureLogsFromNamedLogger() {
        // Given
        Logger logger = LoggerFactory.getLogger("name");
        LogCaptor logCaptor = LogCaptor.forName("name");

        // When
        logger.info("Test message");

        // Then
        assertThat(logCaptor).containsExactly(log(Level.INFO, "Test message"));
    }

    private static Map<String, String> mapWith(String key, String value) {
        Map<String, String> result = new HashMap<>();
        result.put(key, value);
        return result;
    }
}

Maven

<dependency>
    <groupId>com.github.swierkosz</groupId>
    <artifactId>log4j2-captor</artifactId>
    <version>1.0.0</version>
</dependency>

About

A simple Java testing utility for log4j2.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages