This version is still in development and is not considered stable yet. For the latest stable version, please use Micrometer 1.17.0!

Logging Metrics Instrumentation

Micrometer can add metrics to different loggers:

Log4j Instrumentation

// Setting up instrumentation
new Log4j2Metrics().bindTo(registry);

// Usage example
Logger logger = LogManager.getLogger(Log4j2MetricsTest.class);
Configurator.setLevel(Log4j2MetricsTest.class.getName(), Level.INFO);
logger.info("info");
logger.warn("warn");
logger.fatal("fatal");
logger.error("error");
logger.debug("debug"); // shouldn't record a metric as per log level config
logger.trace("trace"); // shouldn't record a metric as per log level config

assertThat(registry.get("log4j2.events").tags("level", "info").counter().count()).isEqualTo(1.0);
assertThat(registry.get("log4j2.events").tags("level", "warn").counter().count()).isEqualTo(1.0);
assertThat(registry.get("log4j2.events").tags("level", "fatal").counter().count()).isEqualTo(1.0);
assertThat(registry.get("log4j2.events").tags("level", "error").counter().count()).isEqualTo(1.0);
assertThat(registry.get("log4j2.events").tags("level", "debug").counter().count()).isEqualTo(0.0);
assertThat(registry.get("log4j2.events").tags("level", "trace").counter().count()).isEqualTo(0.0);

Logback Instrumentation

// Setting up instrumentation
logbackMetrics = new LogbackMetrics();
logbackMetrics.bindTo(registry);

// Usage example
logger.setLevel(Level.INFO);

logger.warn("warn");
logger.error("error");
logger.debug("debug"); // shouldn't record a metric

assertThat(registry.get("logback.events").tags("level", "warn").functionCounter().count()).isEqualTo(1.0);
assertThat(registry.get("logback.events").tags("level", "debug").functionCounter().count()).isEqualTo(0.0);

Lifecycle

Log4j2Metrics and LogbackMetrics implement AutoCloseable. When used outside a lifecycle-aware container, call close() on application shutdown so the binder can clean up the resources it registered or started, such as listeners, schedulers, or meters.