Skip to content

Commit

Permalink
Bump slf4j to 2.x and logback to 1.4
Browse files Browse the repository at this point in the history
  • Loading branch information
sschnabe committed May 15, 2023
1 parent 370ee25 commit ca14eb4
Show file tree
Hide file tree
Showing 12 changed files with 112 additions and 103 deletions.
2 changes: 0 additions & 2 deletions docs/features/logback_appender.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,3 @@
2. if GCP is detected gcp appender will be used
3. if Kubernetes is detected json appender will be used
4. console appender else

*IMPORTENT*: only works without custom `logback.xml`
2 changes: 0 additions & 2 deletions docs/features/logback_default.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ If no `logback.xml` by user is provided a default [logback.xml](../../src/main/r
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">

<include resource="io/kokuwa/logback/base.xml" />

<logger name="io.micronaut.logging.PropertiesLoggingLevelsConfigurer" levels="WARN" />

<root level="INFO">
Expand Down
8 changes: 5 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,12 @@

<!-- dependencies -->

<version.ch.qos.logback>1.2.12</version.ch.qos.logback>
<version.ch.qos.logback>1.4.7</version.ch.qos.logback>
<version.ch.qos.logback.contrib>0.1.5</version.ch.qos.logback.contrib>
<version.io.kokuwa.micronaut.logging>4.0.0-SNAPSHOT</version.io.kokuwa.micronaut.logging>
<version.io.micronaut>3.9.1</version.io.micronaut>
<version.io.micronaut.security> 3.11.0</version.io.micronaut.security>
<version.org.slf4j.api>1.7.36</version.org.slf4j.api>
<version.org.slf4j.api>2.0.7</version.org.slf4j.api>

</properties>

Expand Down Expand Up @@ -223,7 +223,6 @@
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-jackson</artifactId>
<scope>runtime</scope>
</dependency>

</dependencies>
Expand Down Expand Up @@ -370,6 +369,9 @@
<streamLogs>false</streamLogs>
<streamLogsOnFailures>true</streamLogsOnFailures>
<writeJunitReport>true</writeJunitReport>
<!-- logback 1.3+ is not supported by micronaut-->
<!-- https://github.com/micronaut-projects/micronaut-core/issues/8810 -->
<pomExcludes>level-from-micronaut/pom.xml</pomExcludes>
</configuration>
</execution>
</executions>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.kokuwa.micronaut.logging.configurator;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.Configurator;
import ch.qos.logback.classic.util.DefaultJoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.spi.ContextAwareBase;

Expand All @@ -14,12 +14,17 @@
public class DefaultConfigurator extends ContextAwareBase implements Configurator {

@Override
public void configure(LoggerContext loggerContext) {
public ExecutionStatus configure(LoggerContext loggerContext) {

if (new DefaultJoranConfigurator().findURLOfDefaultConfigurationFile(false) != null) {
// there is a default logback file, use this one instead of our default
return ExecutionStatus.INVOKE_NEXT_IF_ANY;
}

var base = DefaultConfigurator.class.getResource("/io/kokuwa/logback/logback-default.xml");
if (base == null) {
addError("Failed to find logback.xml from io.kokuwa:micronaut-logging");
return;
return ExecutionStatus.NEUTRAL;
}

try {
Expand All @@ -29,8 +34,9 @@ public void configure(LoggerContext loggerContext) {
configurator.doConfigure(base);
} catch (JoranException 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);
return ExecutionStatus.DO_NOT_INVOKE_NEXT_IF_ANY;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
public class MicronautJoranConfigurator extends JoranConfigurator {

@Override
public void addInstanceRules(RuleStore rs) {
super.addInstanceRules(rs);
rs.addRule(new ElementSelector("configuration/root/autoAppender"), new RootAutoSelectAppenderAction());
public void addElementSelectorAndActionAssociations(RuleStore rs) {
super.addElementSelectorAndActionAssociations(rs);
rs.addRule(new ElementSelector("configuration/root/autoAppender"), () -> new RootAutoSelectAppenderAction());
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package io.kokuwa.micronaut.logging.configurator;

import java.util.Map;

import org.xml.sax.Attributes;
import java.util.Optional;

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.PatternLayout;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.contrib.jackson.JacksonJsonFormatter;
import ch.qos.logback.contrib.json.classic.JsonLayout;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.Layout;
import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.action.ActionConst;
import ch.qos.logback.core.joran.spi.InterpretationContext;
import ch.qos.logback.core.joran.spi.SaxEventInterpretationContext;
import io.kokuwa.micronaut.logging.layout.GcpJsonLayout;
import io.micronaut.core.util.StringUtils;

/**
Expand All @@ -27,9 +30,16 @@ public class RootAutoSelectAppenderAction extends Action {
private static final String APPENDER_JSON = "JSON";
private static final String APPENDER_GCP = "GCP";
private static final String LOGBACK_APPENDER = "LOGBACK_APPENDER";
private static final String LOGBACK_PATTERN = "LOGBACK_PATTERN";
private static final String LOGBACK_PATTERN_DEFAULT = "%cyan(%d{HH:mm:ss.SSS})"
+ " %gray(%-6.6thread)"
+ " %highlight(%-5level)"
+ " %magenta(%32logger{32})"
+ " %mdc"
+ " %msg%n";

@Override
public void begin(InterpretationContext ic, String name, Attributes attributes) {
public void begin(SaxEventInterpretationContext ic, String name, org.xml.sax.Attributes attributes) {

var rootLogger = LoggerContext.class.cast(context).getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
var rootLoggerAppenders = rootLogger.iteratorForAppenders();
Expand All @@ -38,36 +48,97 @@ public void begin(InterpretationContext ic, String name, Attributes attributes)
return;
}

var envAppender = System.getenv(LOGBACK_APPENDER);
if (envAppender != null && setAppender(ic, rootLogger, envAppender)) {
var envAppender = env(LOGBACK_APPENDER, null);
if (envAppender != null) {
setAppender(rootLogger, envAppender);
return;
}

if (IS_KUBERNETES && setAppender(ic, rootLogger, APPENDER_JSON)) {
if (IS_KUBERNETES) {
setAppender(rootLogger, APPENDER_JSON);
return;
}
if (IS_GCP && setAppender(ic, rootLogger, APPENDER_GCP)) {
if (IS_GCP) {
setAppender(rootLogger, APPENDER_GCP);
return;
}
setAppender(ic, rootLogger, APPENDER_CONSOLE);
setAppender(rootLogger, APPENDER_CONSOLE);
}

@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 void setAppender(Logger rootLogger, String appenderName) {
addInfo("Use appender: " + appenderName);

@SuppressWarnings("unchecked")
var appenderBag = (Map<String, Appender<ILoggingEvent>>) ic.getObjectMap().get(ActionConst.APPENDER_BAG);
var appender = appenderBag.get(appenderName);
if (appender == null) {
addError("Could not find an appender named [" + appenderName
+ "]. Did you define it below instead of above in the configuration file?");
return false;
Layout<ILoggingEvent> layout;
switch (appenderName) {
case APPENDER_JSON:
layout = json();
break;
case APPENDER_GCP:
layout = gcp();
break;
case APPENDER_CONSOLE:
layout = console();
break;
default:
addError("Appender " + appenderName + " not found. Using console ...");
layout = console();
}
layout.start();

var encoder = new LayoutWrappingEncoder<ILoggingEvent>();
encoder.setContext(context);
encoder.setLayout(layout);
encoder.start();

var appender = new ConsoleAppender<ILoggingEvent>();
appender.setContext(context);
appender.setName(appenderName);
appender.setEncoder(encoder);
appender.start();

addInfo("Use appender: " + appenderName);
rootLogger.addAppender(appender);
return true;
}

private Layout<ILoggingEvent> console() {
var layout = new PatternLayout();
layout.setContext(context);
layout.setPattern(env(LOGBACK_PATTERN, LOGBACK_PATTERN_DEFAULT));
return layout;
}

private Layout<ILoggingEvent> json() {
var layout = new JsonLayout();
layout.setContext(context);
layout.setJsonFormatter(new JacksonJsonFormatter());
layout.setAppendLineSeparator(true);
layout.setIncludeContextName(false);
layout.setIncludeMessage(true);
return layout;
}

private Layout<ILoggingEvent> gcp() {
var layout = new GcpJsonLayout();
layout.setContext(context);
layout.setJsonFormatter(new JacksonJsonFormatter());
layout.setAppendLineSeparator(true);
layout.setIncludeContextName(false);
layout.setIncludeMessage(true);
layout.setServiceName(env("SERVICE_NAME", null));
layout.setServiceVersion(env("SERVICE_VERSION", null));
return layout;
}

private String env(String name, String defaultValue) {
var envValue = Optional.ofNullable(System.getenv(name)).map(String::trim).filter(StringUtils::isNotEmpty);
var finalValue = envValue.orElse(defaultValue);
if (envValue.isPresent()) {
addInfo("Use provided config: " + name + "=" + finalValue);
} else {
addInfo("Use default config: " + name + "=" + finalValue);
}
return finalValue;
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,6 @@
{
"resources": {
"includes": [
{
"pattern": "\\Qio/kokuwa/logback/appender-console.xml\\E"
},
{
"pattern": "\\Qio/kokuwa/logback/appender-gcp.xml\\E"
},
{
"pattern": "\\Qio/kokuwa/logback/appender-json.xml\\E"
},
{
"pattern": "\\Qio/kokuwa/logback/base.xml\\E"
},
{
"pattern": "\\Qio/kokuwa/logback/logback-default.xml\\E"
},
Expand Down
12 changes: 0 additions & 12 deletions src/main/resources/io/kokuwa/logback/appender-console.xml

This file was deleted.

17 changes: 0 additions & 17 deletions src/main/resources/io/kokuwa/logback/appender-gcp.xml

This file was deleted.

15 changes: 0 additions & 15 deletions src/main/resources/io/kokuwa/logback/appender-json.xml

This file was deleted.

8 changes: 0 additions & 8 deletions src/main/resources/io/kokuwa/logback/base.xml

This file was deleted.

2 changes: 0 additions & 2 deletions src/main/resources/io/kokuwa/logback/logback-default.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">

<include resource="io/kokuwa/logback/base.xml" />

<logger name="io.micronaut.logging.PropertiesLoggingLevelsConfigurer" levels="WARN" />

<root level="INFO">
Expand Down

0 comments on commit ca14eb4

Please sign in to comment.