Update to version 4.x and update to SLF4J 2.x and Logback 1.4

This commit is contained in:
Stephan Schnabel 2022-09-02 11:07:01 +02:00
parent eb22b5a309
commit f548d198af
Signed by: stephan.schnabel
GPG key ID: E07AF5BA239FE543
5 changed files with 26 additions and 15 deletions

View file

@ -17,6 +17,8 @@ Include in your `pom.xml`:
## Features ## Features
* Version [3.x](https://github.com/kokuwaio/micronaut-logging/tree/3.x) is based on SLF4J 1.7 & Logback 1.2
* Version [4.x](https://github.com/kokuwaio/micronaut-logging/tree/4.x) is based on SLF4J 2.0 & Logback 1.4
* [set log level based on MDC values](docs/features/logback_mdc_level.md) * [set log level based on MDC values](docs/features/logback_mdc_level.md)
* [add default xml](docs/features/logback_default.md) * [add default xml](docs/features/logback_default.md)
* [preconfigured appender for different environments](docs/features/logback_appender.md) * [preconfigured appender for different environments](docs/features/logback_appender.md)

12
pom.xml
View file

@ -4,7 +4,7 @@
<groupId>io.kokuwa.micronaut</groupId> <groupId>io.kokuwa.micronaut</groupId>
<artifactId>micronaut-logging</artifactId> <artifactId>micronaut-logging</artifactId>
<version>3.0.6-SNAPSHOT</version> <version>4.0.0-SNAPSHOT</version>
<name>Logging Support for Micronaut</name> <name>Logging Support for Micronaut</name>
<description>Enhanced logging using MDC or request header.</description> <description>Enhanced logging using MDC or request header.</description>
@ -105,9 +105,10 @@
<!-- dependencies --> <!-- dependencies -->
<version.ch.qos.logback>1.2.11</version.ch.qos.logback> <version.ch.qos.logback>1.4.0</version.ch.qos.logback>
<version.ch.qos.logback.contrib>0.1.5</version.ch.qos.logback.contrib> <version.ch.qos.logback.contrib>0.1.5</version.ch.qos.logback.contrib>
<version.io.micronaut>3.6.1</version.io.micronaut> <version.io.micronaut>3.6.1</version.io.micronaut>
<version.org.slf4j.api>2.0.0</version.org.slf4j.api>
</properties> </properties>
@ -123,6 +124,13 @@
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
<!-- slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${version.org.slf4j.api}</version>
</dependency>
<!-- logback --> <!-- logback -->
<dependency> <dependency>
<groupId>ch.qos.logback</groupId> <groupId>ch.qos.logback</groupId>

View file

@ -14,12 +14,12 @@ import ch.qos.logback.core.spi.ContextAwareBase;
public class DefaultConfigurator extends ContextAwareBase implements Configurator { public class DefaultConfigurator extends ContextAwareBase implements Configurator {
@Override @Override
public void configure(LoggerContext loggerContext) { public ExecutionStatus configure(LoggerContext loggerContext) {
var base = DefaultConfigurator.class.getResource("/io/kokuwa/logback/logback-default.xml"); var base = DefaultConfigurator.class.getResource("/io/kokuwa/logback/logback-default.xml");
if (base == null) { if (base == null) {
addError("Failed to find logback.xml from io.kokuwa:micronaut-logging"); addError("Failed to find logback.xml from io.kokuwa:micronaut-logging");
return; return ExecutionStatus.NEUTRAL;
} }
try { try {
@ -29,8 +29,10 @@ public class DefaultConfigurator extends ContextAwareBase implements Configurato
configurator.doConfigure(base); configurator.doConfigure(base);
} catch (JoranException e) { } catch (JoranException e) {
addError("Failed to load logback.xml from io.kokuwa:micronaut-logging", e); addError("Failed to load logback.xml from io.kokuwa:micronaut-logging", e);
return ExecutionStatus.NEUTRAL;
} }
loggerContext.getLogger("io.micronaut.logging.PropertiesLoggingLevelsConfigurer").setLevel(Level.WARN); loggerContext.getLogger("io.micronaut.logging.PropertiesLoggingLevelsConfigurer").setLevel(Level.WARN);
return ExecutionStatus.DO_NOT_INVOKE_NEXT_IF_ANY;
} }
} }

View file

@ -12,8 +12,8 @@ import ch.qos.logback.core.joran.spi.RuleStore;
public class MicronautJoranConfigurator extends JoranConfigurator { public class MicronautJoranConfigurator extends JoranConfigurator {
@Override @Override
public void addInstanceRules(RuleStore rs) { public void addElementSelectorAndActionAssociations(RuleStore rs) {
super.addInstanceRules(rs); super.addElementSelectorAndActionAssociations(rs);
rs.addRule(new ElementSelector("configuration/root/autoAppender"), new RootAutoSelectAppenderAction()); rs.addRule(new ElementSelector("configuration/root/autoAppender"), () -> new RootAutoSelectAppenderAction());
} }
} }

View file

@ -8,9 +8,9 @@ import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender; import ch.qos.logback.core.Appender;
import ch.qos.logback.core.joran.JoranConstants;
import ch.qos.logback.core.joran.action.Action; import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.action.ActionConst; import ch.qos.logback.core.joran.spi.SaxEventInterpretationContext;
import ch.qos.logback.core.joran.spi.InterpretationContext;
import io.micronaut.core.util.StringUtils; import io.micronaut.core.util.StringUtils;
/** /**
@ -29,9 +29,9 @@ public class RootAutoSelectAppenderAction extends Action {
private static final String LOGBACK_APPENDER = "LOGBACK_APPENDER"; private static final String LOGBACK_APPENDER = "LOGBACK_APPENDER";
@Override @Override
public void begin(InterpretationContext ic, String name, Attributes attributes) { public void begin(SaxEventInterpretationContext ic, String name, Attributes attributes) {
var rootLogger = LoggerContext.class.cast(context).getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); var rootLogger = LoggerContext.class.cast(ic).getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
var rootLoggerAppenders = rootLogger.iteratorForAppenders(); var rootLoggerAppenders = rootLogger.iteratorForAppenders();
if (rootLoggerAppenders.hasNext()) { if (rootLoggerAppenders.hasNext()) {
addWarn("Skip because appender already found: " + rootLoggerAppenders.next().getName()); addWarn("Skip because appender already found: " + rootLoggerAppenders.next().getName());
@ -53,12 +53,11 @@ public class RootAutoSelectAppenderAction extends Action {
} }
@Override @Override
public void end(InterpretationContext ic, String name) {} public void end(SaxEventInterpretationContext ic, String name) {}
private boolean setAppender(InterpretationContext ic, Logger rootLogger, String appenderName) { private boolean setAppender(SaxEventInterpretationContext ic, Logger rootLogger, String appenderName) {
@SuppressWarnings("unchecked") var appenderBag = (Map<String, Appender<ILoggingEvent>>) ic.getContext().getObject(JoranConstants.APPENDER_BAG);
var appenderBag = (Map<String, Appender<ILoggingEvent>>) ic.getObjectMap().get(ActionConst.APPENDER_BAG);
var appender = appenderBag.get(appenderName); var appender = appenderBag.get(appenderName);
if (appender == null) { if (appender == null) {
addError("Could not find an appender named [" + appenderName addError("Could not find an appender named [" + appenderName