Skip to content

Commit

Permalink
Made the id printing in LoggingMeterRegistry configurable (micrometer…
Browse files Browse the repository at this point in the history
  • Loading branch information
laxika authored and shakuzen committed Jun 29, 2019
1 parent d41fbf5 commit a2984b4
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@
import io.micrometer.core.instrument.step.StepTimer;
import io.micrometer.core.instrument.util.NamedThreadFactory;
import io.micrometer.core.instrument.util.TimeUtils;
import io.micrometer.core.lang.Nullable;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.time.Duration;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.StreamSupport;

import static io.micrometer.core.instrument.util.DoubleFormat.decimalOrNan;
Expand All @@ -52,19 +54,24 @@
public class LoggingMeterRegistry extends StepMeterRegistry {
private final LoggingRegistryConfig config;
private final Consumer<String> loggingSink;
private final Function<Meter, String> meterIdPrinter;

public LoggingMeterRegistry() {
this(LoggingRegistryConfig.DEFAULT, Clock.SYSTEM);
}

public LoggingMeterRegistry(LoggingRegistryConfig config, Clock clock) {
this(config, clock, new NamedThreadFactory("logging-metrics-publisher"), defaultLoggingSink());
this(config, clock, new NamedThreadFactory("logging-metrics-publisher"), defaultLoggingSink(), null);
}

private LoggingMeterRegistry(LoggingRegistryConfig config, Clock clock, ThreadFactory threadFactory, Consumer<String> loggingSink) {
private LoggingMeterRegistry(LoggingRegistryConfig config, Clock clock, ThreadFactory threadFactory, Consumer<String> loggingSink, @Nullable Function<Meter, String> meterIdPrinter) {
super(config, clock);
this.config = config;
this.loggingSink = loggingSink;
if (meterIdPrinter == null) {
meterIdPrinter = defaultMeterIdPrinter();
}
this.meterIdPrinter = meterIdPrinter;
config().namingConvention(NamingConvention.dot);
start(threadFactory);
}
Expand All @@ -86,6 +93,12 @@ private static Consumer<String> defaultLoggingSink() {
}
}

private Function<Meter, String> defaultMeterIdPrinter() {
return (meter) -> getConventionName(meter.getId()) + getConventionTags(meter.getId()).stream()
.map(t -> t.getKey() + "=" + t.getValue())
.collect(joining(",", "{", "}"));
}

@Override
public void start(ThreadFactory threadFactory) {
if (config.enabled()) {
Expand Down Expand Up @@ -200,9 +213,7 @@ class Printer {
}

String id() {
return getConventionName(meter.getId()) + getConventionTags(meter.getId()).stream()
.map(t -> t.getKey() + "=" + t.getValue())
.collect(joining(",", "{", "}"));
return meterIdPrinter.apply(meter);
}

String time(double time) {
Expand Down Expand Up @@ -254,6 +265,8 @@ public static class Builder {
private Clock clock = Clock.SYSTEM;
private ThreadFactory threadFactory = new NamedThreadFactory("logging-metrics-publisher");
private Consumer<String> loggingSink = defaultLoggingSink();
@Nullable
private Function<Meter, String> meterIdPrinter = null;

Builder(LoggingRegistryConfig config) {
this.config = config;
Expand All @@ -274,8 +287,13 @@ public Builder loggingSink(Consumer<String> loggingSink) {
return this;
}

public Builder meterIdPrinter(Function<Meter, String> meterIdPrinter) {
this.meterIdPrinter = meterIdPrinter;
return this;
}

public LoggingMeterRegistry build() {
return new LoggingMeterRegistry(config, clock, threadFactory, loggingSink);
return new LoggingMeterRegistry(config, clock, threadFactory, loggingSink, meterIdPrinter);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,7 @@
*/
package io.micrometer.core.instrument.logging;

import io.micrometer.core.instrument.DistributionSummary;
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.Measurement;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.Statistic;
import io.micrometer.core.instrument.*;
import io.micrometer.core.instrument.binder.BaseUnits;
import org.junit.jupiter.api.Test;

Expand All @@ -37,6 +33,27 @@
class LoggingMeterRegistryTest {
private final LoggingMeterRegistry registry = new LoggingMeterRegistry();

@Test
void defaultMeterIdPrinter() {
LoggingMeterRegistry registry = LoggingMeterRegistry.builder(LoggingRegistryConfig.DEFAULT)
.build();
Counter counter = registry.counter("my.gauage", "tag-1", "tag-2");
LoggingMeterRegistry.Printer printer = registry.new Printer(counter);

assertThat(printer.id()).isEqualTo("my.gauage{tag-1=tag-2}");
}

@Test
void customMeterIdPrinter() {
LoggingMeterRegistry registry = LoggingMeterRegistry.builder(LoggingRegistryConfig.DEFAULT)
.meterIdPrinter(meter -> meter.getId().getName())
.build();
Counter counter = registry.counter("my.gauage", "tag-1", "tag-2");
LoggingMeterRegistry.Printer printer = registry.new Printer(counter);

assertThat(printer.id()).isEqualTo("my.gauage");
}

@Test
void humanReadableByteCount() {
LoggingMeterRegistry.Printer printer = registry.new Printer(DistributionSummary.builder("my.summary")
Expand Down

0 comments on commit a2984b4

Please sign in to comment.