From 83238c67d1b59bce6dd085a32b1a6db28e83db66 Mon Sep 17 00:00:00 2001 From: Matthew Dolan Date: Tue, 7 Sep 2021 14:34:27 -0500 Subject: [PATCH 1/2] Add the InstrumentedAppender constructor that allows passing a CollectorRegistry Signed-off-by: Matthew Dolan --- .../client/logback/InstrumentedAppender.java | 58 +++++----- .../logback/InstrumentedAppenderTest.java | 103 +++++++++++------- 2 files changed, 96 insertions(+), 65 deletions(-) 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..5af03e2da 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,65 +12,88 @@ import org.junit.Test; public class InstrumentedAppenderTest { + public abstract static class Base { + CollectorRegistry registry; + InstrumentedAppender appender; + private ILoggingEvent event; - private InstrumentedAppender appender; - private ILoggingEvent event; + @Before + public void setUp() throws Exception { + this.appender.start(); - @Before - public void setUp() throws Exception { - appender = new InstrumentedAppender(); - appender.start(); - - event = mock(ILoggingEvent.class); - } + this.event = mock(ILoggingEvent.class); + } - @Test - public void metersTraceEvents() throws Exception { - when(event.getLevel()).thenReturn(Level.TRACE); + @Test + public void metersTraceEvents() throws Exception { + when(this.event.getLevel()).thenReturn(Level.TRACE); - appender.doAppend(event); + this.appender.doAppend(event); - assertEquals(1, getLogLevelCount("trace")); - } + assertEquals(1, this.getLogLevelCount("trace")); + } - @Test - public void metersDebugEvents() throws Exception { - when(event.getLevel()).thenReturn(Level.DEBUG); + @Test + public void metersDebugEvents() throws Exception { + when(this.event.getLevel()).thenReturn(Level.DEBUG); - appender.doAppend(event); + this.appender.doAppend(event); - assertEquals(1, getLogLevelCount("debug")); - } + assertEquals(1, this.getLogLevelCount("debug")); + } - @Test - public void metersInfoEvents() throws Exception { - when(event.getLevel()).thenReturn(Level.INFO); + @Test + public void metersInfoEvents() throws Exception { + when(this.event.getLevel()).thenReturn(Level.INFO); - appender.doAppend(event); + this.appender.doAppend(event); - assertEquals(1, getLogLevelCount("info")); - } + assertEquals(1, this.getLogLevelCount("info")); + } + + @Test + public void metersWarnEvents() throws Exception { + when(this.event.getLevel()).thenReturn(Level.WARN); - @Test - public void metersWarnEvents() throws Exception { - when(event.getLevel()).thenReturn(Level.WARN); + this.appender.doAppend(event); - appender.doAppend(event); + assertEquals(1, this.getLogLevelCount("warn")); + } - assertEquals(1, getLogLevelCount("warn")); + @Test + public void metersErrorEvents() throws Exception { + when(this.event.getLevel()).thenReturn(Level.ERROR); + + this.appender.doAppend(event); + + assertEquals(1, this.getLogLevelCount("error")); + } + + private int getLogLevelCount(String level) { + return this.registry.getSampleValue(COUNTER_NAME, + new String[]{"level"}, new String[]{level}).intValue(); + } } - @Test - public void metersErrorEvents() throws Exception { - when(event.getLevel()).thenReturn(Level.ERROR); + public static class DefaultTest extends Base { + @Before + public void setUp() throws Exception { + this.registry = CollectorRegistry.defaultRegistry; - appender.doAppend(event); + this.appender = new InstrumentedAppender(); - assertEquals(1, getLogLevelCount("error")); + super.setUp(); + } } - private int getLogLevelCount(String level) { - return CollectorRegistry.defaultRegistry.getSampleValue(COUNTER_NAME, - new String[]{"level"}, new String[]{level}).intValue(); + public static class InstanceTest extends Base { + @Before + public void setUp() throws Exception { + this.registry = new CollectorRegistry(); + + this.appender = new InstrumentedAppender(this.registry); + + super.setUp(); + } } } From 9cb547154d191fd93dbb6bd38d244ab5c03329db Mon Sep 17 00:00:00 2001 From: Matthew Dolan Date: Fri, 10 Sep 2021 12:05:57 -0500 Subject: [PATCH 2/2] address comment: fix tests Signed-off-by: Matthew Dolan --- .../logback/InstrumentedAppenderTest.java | 118 +++++++++--------- 1 file changed, 58 insertions(+), 60 deletions(-) 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 5af03e2da..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,88 +12,86 @@ import org.junit.Test; public class InstrumentedAppenderTest { - public abstract static class Base { - CollectorRegistry registry; - InstrumentedAppender appender; - private ILoggingEvent event; + private CollectorRegistry registry; + private InstrumentedAppender appender; + private InstrumentedAppender defaultAppender; + private ILoggingEvent event; - @Before - public void setUp() throws Exception { - this.appender.start(); + @Before + public void setUp() throws Exception { + registry = new CollectorRegistry(); - this.event = mock(ILoggingEvent.class); - } + appender = new InstrumentedAppender(registry); + appender.start(); - @Test - public void metersTraceEvents() throws Exception { - when(this.event.getLevel()).thenReturn(Level.TRACE); + defaultAppender = new InstrumentedAppender(); + defaultAppender.start(); - this.appender.doAppend(event); - - assertEquals(1, this.getLogLevelCount("trace")); - } - - @Test - public void metersDebugEvents() throws Exception { - when(this.event.getLevel()).thenReturn(Level.DEBUG); + event = mock(ILoggingEvent.class); + } - this.appender.doAppend(event); + @Test + public void metersTraceEvents() throws Exception { + when(event.getLevel()).thenReturn(Level.TRACE); - assertEquals(1, this.getLogLevelCount("debug")); - } + appender.doAppend(event); + assertEquals(1, getLogLevelCount("trace")); - @Test - public void metersInfoEvents() throws Exception { - when(this.event.getLevel()).thenReturn(Level.INFO); + defaultAppender.doAppend(event); + assertEquals(1, getDefaultLogLevelCount("trace")); + } - this.appender.doAppend(event); + @Test + public void metersDebugEvents() throws Exception { + when(event.getLevel()).thenReturn(Level.DEBUG); - assertEquals(1, this.getLogLevelCount("info")); - } + appender.doAppend(event); + assertEquals(1, getLogLevelCount("debug")); - @Test - public void metersWarnEvents() throws Exception { - when(this.event.getLevel()).thenReturn(Level.WARN); + defaultAppender.doAppend(event); + assertEquals(1, getDefaultLogLevelCount("debug")); + } - this.appender.doAppend(event); + @Test + public void metersInfoEvents() throws Exception { + when(event.getLevel()).thenReturn(Level.INFO); - assertEquals(1, this.getLogLevelCount("warn")); - } + appender.doAppend(event); + assertEquals(1, getLogLevelCount("info")); - @Test - public void metersErrorEvents() throws Exception { - when(this.event.getLevel()).thenReturn(Level.ERROR); + defaultAppender.doAppend(event); + assertEquals(1, getDefaultLogLevelCount("info")); + } - this.appender.doAppend(event); + @Test + public void metersWarnEvents() throws Exception { + when(event.getLevel()).thenReturn(Level.WARN); - assertEquals(1, this.getLogLevelCount("error")); - } + appender.doAppend(event); + assertEquals(1, getLogLevelCount("warn")); - private int getLogLevelCount(String level) { - return this.registry.getSampleValue(COUNTER_NAME, - new String[]{"level"}, new String[]{level}).intValue(); - } + defaultAppender.doAppend(event); + assertEquals(1, getDefaultLogLevelCount("warn")); } - public static class DefaultTest extends Base { - @Before - public void setUp() throws Exception { - this.registry = CollectorRegistry.defaultRegistry; + @Test + public void metersErrorEvents() throws Exception { + when(event.getLevel()).thenReturn(Level.ERROR); - this.appender = new InstrumentedAppender(); + appender.doAppend(event); + assertEquals(1, getLogLevelCount("error")); - super.setUp(); - } + defaultAppender.doAppend(event); + assertEquals(1, getDefaultLogLevelCount("error")); } - public static class InstanceTest extends Base { - @Before - public void setUp() throws Exception { - this.registry = new CollectorRegistry(); - - this.appender = new InstrumentedAppender(this.registry); + private int getLogLevelCount(String level) { + return registry.getSampleValue(COUNTER_NAME, new String[]{"level"}, new String[]{level}).intValue(); + } - super.setUp(); - } + private int getDefaultLogLevelCount(String level) { + return CollectorRegistry.defaultRegistry + .getSampleValue(COUNTER_NAME, new String[]{"level"}, new String[]{level}) + .intValue(); } }