package io.dropwizard.metrics.log4j2; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.core.LogEvent; import org.junit.After; import org.junit.Before; import org.junit.Test; import io.dropwizard.metrics.log4j2.InstrumentedAppender; import io.dropwizard.metrics.MetricRegistry; import io.dropwizard.metrics.SharedMetricRegistries; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class InstrumentedAppenderTest { public static final String METRIC_NAME_PREFIX = "org.apache.logging.log4j.core.Appender"; private final MetricRegistry registry = new MetricRegistry(); private final InstrumentedAppender appender = new InstrumentedAppender(registry); private final LogEvent event = mock(LogEvent.class); @Before public void setUp() throws Exception { appender.start(); } @After public void tearDown() throws Exception { SharedMetricRegistries.clear(); } @Test public void metersTraceEvents() throws Exception { when(event.getLevel()).thenReturn(Level.TRACE); appender.append(event); assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount()) .isEqualTo(1); assertThat(registry.meter(METRIC_NAME_PREFIX + ".trace").getCount()) .isEqualTo(1); } @Test public void metersDebugEvents() throws Exception { when(event.getLevel()).thenReturn(Level.DEBUG); appender.append(event); assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount()) .isEqualTo(1); assertThat(registry.meter(METRIC_NAME_PREFIX + ".debug").getCount()) .isEqualTo(1); } @Test public void metersInfoEvents() throws Exception { when(event.getLevel()).thenReturn(Level.INFO); appender.append(event); assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount()) .isEqualTo(1); assertThat(registry.meter(METRIC_NAME_PREFIX + ".info").getCount()) .isEqualTo(1); } @Test public void metersWarnEvents() throws Exception { when(event.getLevel()).thenReturn(Level.WARN); appender.append(event); assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount()) .isEqualTo(1); assertThat(registry.meter(METRIC_NAME_PREFIX + ".warn").getCount()) .isEqualTo(1); } @Test public void metersErrorEvents() throws Exception { when(event.getLevel()).thenReturn(Level.ERROR); appender.append(event); assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount()) .isEqualTo(1); assertThat(registry.meter(METRIC_NAME_PREFIX + ".error").getCount()) .isEqualTo(1); } @Test public void metersFatalEvents() throws Exception { when(event.getLevel()).thenReturn(Level.FATAL); appender.append(event); assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount()) .isEqualTo(1); assertThat(registry.meter(METRIC_NAME_PREFIX + ".fatal").getCount()) .isEqualTo(1); } @Test public void usesSharedRegistries() throws Exception { String registryName = "registry"; SharedMetricRegistries.add(registryName, registry); final InstrumentedAppender shared = new InstrumentedAppender(registryName); shared.start(); when(event.getLevel()).thenReturn(Level.INFO); shared.append(event); assertThat(registry.meter(METRIC_NAME_PREFIX + ".info").getCount()) .isEqualTo(1); } }