diff --git a/simpleclient_logback/src/main/java/io/prometheus/client/logback/InstrumentedAppender.java b/simpleclient_logback/src/main/java/io/prometheus/client/logback/InstrumentedAppender.java index 2865bb471..092f52dc3 100644 --- a/simpleclient_logback/src/main/java/io/prometheus/client/logback/InstrumentedAppender.java +++ b/simpleclient_logback/src/main/java/io/prometheus/client/logback/InstrumentedAppender.java @@ -3,38 +3,46 @@ import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.UnsynchronizedAppenderBase; +import io.prometheus.client.CollectorRegistry; import io.prometheus.client.Counter; public class InstrumentedAppender extends UnsynchronizedAppenderBase { - public static final String COUNTER_NAME = "logback_appender_total"; - private static final Counter COUNTER; - private static final Counter.Child TRACE_LABEL; - private static final Counter.Child DEBUG_LABEL; - private static final Counter.Child INFO_LABEL; - private static final Counter.Child WARN_LABEL; - private static final Counter.Child ERROR_LABEL; - - static { - COUNTER = Counter.build().name(COUNTER_NAME) - .help("Logback log statements at various log levels") - .labelNames("level") - .register(); - - TRACE_LABEL = COUNTER.labels("trace"); - DEBUG_LABEL = COUNTER.labels("debug"); - INFO_LABEL = COUNTER.labels("info"); - WARN_LABEL = COUNTER.labels("warn"); - ERROR_LABEL = COUNTER.labels("error"); - } + private static final Counter defaultCounter = Counter.build().name(COUNTER_NAME) + .help("Logback log statements at various log levels") + .labelNames("level") + .register(); + private final Counter.Child traceCounter; + private final Counter.Child debugCounter; + private final Counter.Child infoCounter; + private final Counter.Child warnCounter; + private final Counter.Child errorCounter; /** * Create a new instrumented appender using the default registry. */ public InstrumentedAppender() { + this(defaultCounter); } + /** + * Create a new instrumented appender using the supplied registry. + */ + public InstrumentedAppender(CollectorRegistry registry) { + this(Counter.build().name(COUNTER_NAME) + .help("Logback log statements at various log levels") + .labelNames("level") + .register(registry)); + } + + private InstrumentedAppender(Counter counter) { + this.traceCounter = counter.labels("trace"); + this.debugCounter = counter.labels("debug"); + this.infoCounter = counter.labels("info"); + this.warnCounter = counter.labels("warn"); + this.errorCounter = counter.labels("error"); + } @Override public void start() { @@ -45,19 +53,19 @@ public void start() { protected void append(ILoggingEvent event) { switch (event.getLevel().toInt()) { case Level.TRACE_INT: - TRACE_LABEL.inc(); + this.traceCounter.inc(); break; case Level.DEBUG_INT: - DEBUG_LABEL.inc(); + this.debugCounter.inc(); break; case Level.INFO_INT: - INFO_LABEL.inc(); + this.infoCounter.inc(); break; case Level.WARN_INT: - WARN_LABEL.inc(); + this.warnCounter.inc(); break; case Level.ERROR_INT: - ERROR_LABEL.inc(); + this.errorCounter.inc(); break; default: break; diff --git a/simpleclient_logback/src/test/java/io/prometheus/client/logback/InstrumentedAppenderTest.java b/simpleclient_logback/src/test/java/io/prometheus/client/logback/InstrumentedAppenderTest.java index b9b853710..af3bd1610 100644 --- a/simpleclient_logback/src/test/java/io/prometheus/client/logback/InstrumentedAppenderTest.java +++ b/simpleclient_logback/src/test/java/io/prometheus/client/logback/InstrumentedAppenderTest.java @@ -12,15 +12,21 @@ import org.junit.Test; public class InstrumentedAppenderTest { - + private CollectorRegistry registry; private InstrumentedAppender appender; + private InstrumentedAppender defaultAppender; private ILoggingEvent event; @Before public void setUp() throws Exception { - appender = new InstrumentedAppender(); + registry = new CollectorRegistry(); + + appender = new InstrumentedAppender(registry); appender.start(); - + + defaultAppender = new InstrumentedAppender(); + defaultAppender.start(); + event = mock(ILoggingEvent.class); } @@ -29,8 +35,10 @@ public void metersTraceEvents() throws Exception { when(event.getLevel()).thenReturn(Level.TRACE); appender.doAppend(event); - assertEquals(1, getLogLevelCount("trace")); + + defaultAppender.doAppend(event); + assertEquals(1, getDefaultLogLevelCount("trace")); } @Test @@ -38,8 +46,10 @@ public void metersDebugEvents() throws Exception { when(event.getLevel()).thenReturn(Level.DEBUG); appender.doAppend(event); - assertEquals(1, getLogLevelCount("debug")); + + defaultAppender.doAppend(event); + assertEquals(1, getDefaultLogLevelCount("debug")); } @Test @@ -47,8 +57,10 @@ public void metersInfoEvents() throws Exception { when(event.getLevel()).thenReturn(Level.INFO); appender.doAppend(event); - assertEquals(1, getLogLevelCount("info")); + + defaultAppender.doAppend(event); + assertEquals(1, getDefaultLogLevelCount("info")); } @Test @@ -56,8 +68,10 @@ public void metersWarnEvents() throws Exception { when(event.getLevel()).thenReturn(Level.WARN); appender.doAppend(event); - assertEquals(1, getLogLevelCount("warn")); + + defaultAppender.doAppend(event); + assertEquals(1, getDefaultLogLevelCount("warn")); } @Test @@ -65,12 +79,19 @@ public void metersErrorEvents() throws Exception { when(event.getLevel()).thenReturn(Level.ERROR); appender.doAppend(event); - assertEquals(1, getLogLevelCount("error")); + + defaultAppender.doAppend(event); + assertEquals(1, getDefaultLogLevelCount("error")); } private int getLogLevelCount(String level) { - return CollectorRegistry.defaultRegistry.getSampleValue(COUNTER_NAME, - new String[]{"level"}, new String[]{level}).intValue(); + return registry.getSampleValue(COUNTER_NAME, new String[]{"level"}, new String[]{level}).intValue(); + } + + private int getDefaultLogLevelCount(String level) { + return CollectorRegistry.defaultRegistry + .getSampleValue(COUNTER_NAME, new String[]{"level"}, new String[]{level}) + .intValue(); } }