Skip to content

Commit 7ce6f62

Browse files
committed
Add module for Logback 1.5.x
1 parent e924e0d commit 7ce6f62

File tree

5 files changed

+328
-0
lines changed

5 files changed

+328
-0
lines changed

metrics-bom/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,11 @@
155155
<artifactId>metrics-logback14</artifactId>
156156
<version>${project.version}</version>
157157
</dependency>
158+
<dependency>
159+
<groupId>io.dropwizard.metrics5</groupId>
160+
<artifactId>metrics-logback15</artifactId>
161+
<version>${project.version}</version>
162+
</dependency>
158163
<dependency>
159164
<groupId>io.dropwizard.metrics5</groupId>
160165
<artifactId>metrics-servlet</artifactId>

metrics-logback15/pom.xml

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<parent>
6+
<groupId>io.dropwizard.metrics5</groupId>
7+
<artifactId>metrics-parent</artifactId>
8+
<version>5.0.0-rc21-SNAPSHOT</version>
9+
</parent>
10+
11+
<artifactId>metrics-logback15</artifactId>
12+
<name>Metrics Integration for Logback 1.5.x</name>
13+
<packaging>bundle</packaging>
14+
<description>
15+
An instrumented appender for Logback 1.5.x.
16+
</description>
17+
18+
<properties>
19+
<javaModuleName>io.dropwizard.metrics5.logback15</javaModuleName>
20+
<logback15.version>1.5.0</logback15.version>
21+
22+
<maven.compiler.source>11</maven.compiler.source>
23+
<maven.compiler.target>11</maven.compiler.target>
24+
</properties>
25+
26+
<dependencyManagement>
27+
<dependencies>
28+
<dependency>
29+
<groupId>io.dropwizard.metrics5</groupId>
30+
<artifactId>metrics-bom</artifactId>
31+
<version>${project.version}</version>
32+
<type>pom</type>
33+
<scope>import</scope>
34+
</dependency>
35+
<dependency>
36+
<groupId>net.bytebuddy</groupId>
37+
<artifactId>byte-buddy</artifactId>
38+
<version>${byte-buddy.version}</version>
39+
</dependency>
40+
</dependencies>
41+
</dependencyManagement>
42+
43+
<dependencies>
44+
<dependency>
45+
<groupId>io.dropwizard.metrics5</groupId>
46+
<artifactId>metrics-core</artifactId>
47+
<exclusions>
48+
<exclusion>
49+
<groupId>org.slf4j</groupId>
50+
<artifactId>slf4j-api</artifactId>
51+
</exclusion>
52+
</exclusions>
53+
</dependency>
54+
<dependency>
55+
<groupId>ch.qos.logback</groupId>
56+
<artifactId>logback-core</artifactId>
57+
<version>${logback15.version}</version>
58+
</dependency>
59+
<dependency>
60+
<groupId>ch.qos.logback</groupId>
61+
<artifactId>logback-classic</artifactId>
62+
<version>${logback15.version}</version>
63+
</dependency>
64+
<dependency>
65+
<groupId>org.assertj</groupId>
66+
<artifactId>assertj-core</artifactId>
67+
<version>${assertj.version}</version>
68+
<scope>test</scope>
69+
</dependency>
70+
<dependency>
71+
<groupId>org.junit.jupiter</groupId>
72+
<artifactId>junit-jupiter-api</artifactId>
73+
<version>${junit5.version}</version>
74+
<scope>test</scope>
75+
</dependency>
76+
<dependency>
77+
<groupId>org.junit.jupiter</groupId>
78+
<artifactId>junit-jupiter</artifactId>
79+
<version>${junit5.version}</version>
80+
<scope>test</scope>
81+
</dependency>
82+
<dependency>
83+
<groupId>org.mockito</groupId>
84+
<artifactId>mockito-core</artifactId>
85+
<version>${mockito.version}</version>
86+
<scope>test</scope>
87+
</dependency>
88+
</dependencies>
89+
</project>
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package io.dropwizard.metrics5.logback15;
2+
3+
import ch.qos.logback.classic.Level;
4+
import ch.qos.logback.classic.spi.ILoggingEvent;
5+
import ch.qos.logback.core.Appender;
6+
import ch.qos.logback.core.UnsynchronizedAppenderBase;
7+
import io.dropwizard.metrics5.Meter;
8+
import io.dropwizard.metrics5.MetricRegistry;
9+
import io.dropwizard.metrics5.SharedMetricRegistries;
10+
11+
import static io.dropwizard.metrics5.MetricRegistry.name;
12+
13+
/**
14+
* A Logback {@link Appender} which has six meters, one for each logging level and one for the total
15+
* number of statements being logged. The meter names are the logging level names appended to the
16+
* name of the appender.
17+
*/
18+
public class InstrumentedAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {
19+
private final MetricRegistry registry;
20+
public static final String DEFAULT_REGISTRY = "logback-metrics";
21+
public static final String REGISTRY_PROPERTY_NAME = "metrics.logback.registry";
22+
23+
private Meter all;
24+
private Meter trace;
25+
private Meter debug;
26+
private Meter info;
27+
private Meter warn;
28+
private Meter error;
29+
30+
31+
/**
32+
* Create a new instrumented appender using the given registry name.
33+
*/
34+
public InstrumentedAppender() {
35+
this(System.getProperty(REGISTRY_PROPERTY_NAME, DEFAULT_REGISTRY));
36+
}
37+
38+
/**
39+
* Create a new instrumented appender using the given registry name.
40+
*
41+
* @param registryName the name of the registry in {@link SharedMetricRegistries}
42+
*/
43+
public InstrumentedAppender(String registryName) {
44+
this(SharedMetricRegistries.getOrCreate(registryName));
45+
}
46+
47+
/**
48+
* Create a new instrumented appender using the given registry.
49+
*
50+
* @param registry the metric registry
51+
*/
52+
public InstrumentedAppender(MetricRegistry registry) {
53+
this.registry = registry;
54+
setName(Appender.class.getName());
55+
}
56+
57+
@Override
58+
public void start() {
59+
this.all = registry.meter(name(getName(), "all"));
60+
this.trace = registry.meter(name(getName(), "trace"));
61+
this.debug = registry.meter(name(getName(), "debug"));
62+
this.info = registry.meter(name(getName(), "info"));
63+
this.warn = registry.meter(name(getName(), "warn"));
64+
this.error = registry.meter(name(getName(), "error"));
65+
super.start();
66+
}
67+
68+
@Override
69+
protected void append(ILoggingEvent event) {
70+
all.mark();
71+
switch (event.getLevel().toInt()) {
72+
case Level.TRACE_INT:
73+
trace.mark();
74+
break;
75+
case Level.DEBUG_INT:
76+
debug.mark();
77+
break;
78+
case Level.INFO_INT:
79+
info.mark();
80+
break;
81+
case Level.WARN_INT:
82+
warn.mark();
83+
break;
84+
case Level.ERROR_INT:
85+
error.mark();
86+
break;
87+
default:
88+
break;
89+
}
90+
}
91+
}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
package io.dropwizard.metrics5.logback15;
2+
3+
import ch.qos.logback.classic.Level;
4+
import ch.qos.logback.classic.spi.ILoggingEvent;
5+
import io.dropwizard.metrics5.MetricRegistry;
6+
import io.dropwizard.metrics5.SharedMetricRegistries;
7+
import org.junit.jupiter.api.AfterEach;
8+
import org.junit.jupiter.api.BeforeEach;
9+
import org.junit.jupiter.api.Test;
10+
11+
import static org.assertj.core.api.Assertions.assertThat;
12+
import static org.mockito.Mockito.mock;
13+
import static org.mockito.Mockito.when;
14+
15+
public class InstrumentedAppenderTest {
16+
17+
public static final String METRIC_NAME_PREFIX = "ch.qos.logback.core.Appender";
18+
19+
private final MetricRegistry registry = new MetricRegistry();
20+
private final InstrumentedAppender appender = new InstrumentedAppender(registry);
21+
private final ILoggingEvent event = mock(ILoggingEvent.class);
22+
23+
@BeforeEach
24+
void setUp() {
25+
appender.start();
26+
}
27+
28+
@AfterEach
29+
void tearDown() {
30+
SharedMetricRegistries.clear();
31+
}
32+
33+
@Test
34+
void metersTraceEvents() {
35+
when(event.getLevel()).thenReturn(Level.TRACE);
36+
37+
appender.doAppend(event);
38+
39+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount())
40+
.isEqualTo(1);
41+
42+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".trace").getCount())
43+
.isEqualTo(1);
44+
}
45+
46+
@Test
47+
void metersDebugEvents() {
48+
when(event.getLevel()).thenReturn(Level.DEBUG);
49+
50+
appender.doAppend(event);
51+
52+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount())
53+
.isEqualTo(1);
54+
55+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".debug").getCount())
56+
.isEqualTo(1);
57+
}
58+
59+
@Test
60+
void metersInfoEvents() {
61+
when(event.getLevel()).thenReturn(Level.INFO);
62+
63+
appender.doAppend(event);
64+
65+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount())
66+
.isEqualTo(1);
67+
68+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".info").getCount())
69+
.isEqualTo(1);
70+
}
71+
72+
@Test
73+
void metersWarnEvents() {
74+
when(event.getLevel()).thenReturn(Level.WARN);
75+
76+
appender.doAppend(event);
77+
78+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount())
79+
.isEqualTo(1);
80+
81+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".warn").getCount())
82+
.isEqualTo(1);
83+
}
84+
85+
@Test
86+
void metersErrorEvents() {
87+
when(event.getLevel()).thenReturn(Level.ERROR);
88+
89+
appender.doAppend(event);
90+
91+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".all").getCount())
92+
.isEqualTo(1);
93+
94+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".error").getCount())
95+
.isEqualTo(1);
96+
}
97+
98+
@Test
99+
void usesSharedRegistries() {
100+
101+
String registryName = "registry";
102+
103+
SharedMetricRegistries.add(registryName, registry);
104+
final InstrumentedAppender shared = new InstrumentedAppender(registryName);
105+
shared.start();
106+
107+
when(event.getLevel()).thenReturn(Level.INFO);
108+
109+
shared.doAppend(event);
110+
111+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".info").getCount())
112+
.isEqualTo(1);
113+
}
114+
115+
@Test
116+
void usesDefaultRegistry() {
117+
SharedMetricRegistries.add(InstrumentedAppender.DEFAULT_REGISTRY, registry);
118+
final InstrumentedAppender shared = new InstrumentedAppender();
119+
shared.start();
120+
when(event.getLevel()).thenReturn(Level.INFO);
121+
shared.doAppend(event);
122+
123+
assertThat(SharedMetricRegistries.names()).contains(InstrumentedAppender.DEFAULT_REGISTRY);
124+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".info").getCount())
125+
.isEqualTo(1);
126+
}
127+
128+
@Test
129+
void usesRegistryFromProperty() {
130+
SharedMetricRegistries.add("something_else", registry);
131+
System.setProperty(InstrumentedAppender.REGISTRY_PROPERTY_NAME, "something_else");
132+
final InstrumentedAppender shared = new InstrumentedAppender();
133+
shared.start();
134+
when(event.getLevel()).thenReturn(Level.INFO);
135+
shared.doAppend(event);
136+
137+
assertThat(SharedMetricRegistries.names()).contains("something_else");
138+
assertThat(registry.meter(METRIC_NAME_PREFIX + ".info").getCount())
139+
.isEqualTo(1);
140+
}
141+
142+
}

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
<module>metrics-log4j2</module>
4343
<module>metrics-logback13</module>
4444
<module>metrics-logback14</module>
45+
<module>metrics-logback15</module>
4546
<module>metrics-servlet</module>
4647
<module>metrics-servlets</module>
4748
<module>metrics-jcstress</module>

0 commit comments

Comments
 (0)