Bump slf4j to 2.x and logback to 1.4
This commit is contained in:
parent
42c94e00dc
commit
1678eadac2
13 changed files with 137 additions and 93 deletions
|
@ -12,5 +12,3 @@
|
||||||
2. if GCP is detected gcp appender will be used
|
2. if GCP is detected gcp appender will be used
|
||||||
3. if Kubernetes is detected json appender will be used
|
3. if Kubernetes is detected json appender will be used
|
||||||
4. console appender else
|
4. console appender else
|
||||||
|
|
||||||
*IMPORTENT*: only works without custom `logback.xml`
|
|
||||||
|
|
|
@ -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"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<configuration debug="false" scan="false">
|
<configuration debug="false" scan="false">
|
||||||
|
|
||||||
<include resource="io/kokuwa/logback/base.xml" />
|
|
||||||
|
|
||||||
<logger name="io.micronaut.logging.PropertiesLoggingLevelsConfigurer" levels="WARN" />
|
<logger name="io.micronaut.logging.PropertiesLoggingLevelsConfigurer" levels="WARN" />
|
||||||
|
|
||||||
<root level="INFO">
|
<root level="INFO">
|
||||||
|
|
20
pom.xml
20
pom.xml
|
@ -70,6 +70,8 @@
|
||||||
<!-- ===================================================================== -->
|
<!-- ===================================================================== -->
|
||||||
|
|
||||||
<version.io.micronaut>3.9.4</version.io.micronaut>
|
<version.io.micronaut>3.9.4</version.io.micronaut>
|
||||||
|
<version.org.slf4j>2.0.7</version.org.slf4j>
|
||||||
|
<version.ch.qos.logback>1.4.8</version.ch.qos.logback>
|
||||||
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
@ -82,6 +84,21 @@
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>${version.org.slf4j}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-classic</artifactId>
|
||||||
|
<version>${version.ch.qos.logback}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-core</artifactId>
|
||||||
|
<version>${version.ch.qos.logback}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
@ -181,6 +198,9 @@
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<parallelThreads>0.5C</parallelThreads>
|
<parallelThreads>0.5C</parallelThreads>
|
||||||
|
<!-- 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>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
|
|
@ -49,6 +49,8 @@
|
||||||
|
|
||||||
<version.io.kokuwa.micronaut.logging>@project.version@</version.io.kokuwa.micronaut.logging>
|
<version.io.kokuwa.micronaut.logging>@project.version@</version.io.kokuwa.micronaut.logging>
|
||||||
<version.io.micronaut>@version.io.micronaut@</version.io.micronaut>
|
<version.io.micronaut>@version.io.micronaut@</version.io.micronaut>
|
||||||
|
<version.org.slf4j>@version.org.slf4j@</version.org.slf4j>
|
||||||
|
<version.ch.qos.logback>@version.ch.qos.logback@</version.ch.qos.logback>
|
||||||
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
@ -66,6 +68,21 @@
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>${version.org.slf4j}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-classic</artifactId>
|
||||||
|
<version>${version.ch.qos.logback}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-core</artifactId>
|
||||||
|
<version>${version.ch.qos.logback}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package io.kokuwa.micronaut.logging.configurator;
|
package io.kokuwa.micronaut.logging.configurator;
|
||||||
|
|
||||||
import ch.qos.logback.classic.Level;
|
|
||||||
import ch.qos.logback.classic.LoggerContext;
|
import ch.qos.logback.classic.LoggerContext;
|
||||||
import ch.qos.logback.classic.spi.Configurator;
|
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.joran.spi.JoranException;
|
||||||
import ch.qos.logback.core.spi.ContextAwareBase;
|
import ch.qos.logback.core.spi.ContextAwareBase;
|
||||||
|
|
||||||
|
@ -14,12 +14,17 @@ 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) {
|
||||||
|
|
||||||
|
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");
|
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 +34,9 @@ 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);
|
return ExecutionStatus.DO_NOT_INVOKE_NEXT_IF_ANY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,18 @@
|
||||||
package io.kokuwa.micronaut.logging.configurator;
|
package io.kokuwa.micronaut.logging.configurator;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.xml.sax.Attributes;
|
|
||||||
|
|
||||||
import ch.qos.logback.classic.Logger;
|
import ch.qos.logback.classic.Logger;
|
||||||
import ch.qos.logback.classic.LoggerContext;
|
import ch.qos.logback.classic.LoggerContext;
|
||||||
|
import ch.qos.logback.classic.PatternLayout;
|
||||||
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.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.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.kokuwa.micronaut.logging.layout.GcpJsonLayout;
|
||||||
|
import io.kokuwa.micronaut.logging.layout.JsonLayout;
|
||||||
import io.micronaut.core.util.StringUtils;
|
import io.micronaut.core.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -27,9 +29,16 @@ public class RootAutoSelectAppenderAction extends Action {
|
||||||
private static final String APPENDER_JSON = "JSON";
|
private static final String APPENDER_JSON = "JSON";
|
||||||
private static final String APPENDER_GCP = "GCP";
|
private static final String APPENDER_GCP = "GCP";
|
||||||
private static final String LOGBACK_APPENDER = "LOGBACK_APPENDER";
|
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
|
@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 rootLogger = LoggerContext.class.cast(context).getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
|
||||||
var rootLoggerAppenders = rootLogger.iteratorForAppenders();
|
var rootLoggerAppenders = rootLogger.iteratorForAppenders();
|
||||||
|
@ -38,36 +47,89 @@ public class RootAutoSelectAppenderAction extends Action {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var envAppender = System.getenv(LOGBACK_APPENDER);
|
var envAppender = env(LOGBACK_APPENDER, null);
|
||||||
if (envAppender != null && setAppender(ic, rootLogger, envAppender)) {
|
if (envAppender != null) {
|
||||||
|
setAppender(rootLogger, envAppender);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_KUBERNETES && setAppender(ic, rootLogger, APPENDER_JSON)) {
|
if (IS_KUBERNETES) {
|
||||||
|
setAppender(rootLogger, APPENDER_JSON);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (IS_GCP && setAppender(ic, rootLogger, APPENDER_GCP)) {
|
if (IS_GCP) {
|
||||||
|
setAppender(rootLogger, APPENDER_GCP);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setAppender(ic, rootLogger, APPENDER_CONSOLE);
|
setAppender(rootLogger, APPENDER_CONSOLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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 void setAppender(Logger rootLogger, String appenderName) {
|
||||||
|
addInfo("Use appender: " + appenderName);
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
Layout<ILoggingEvent> layout;
|
||||||
var appenderBag = (Map<String, Appender<ILoggingEvent>>) ic.getObjectMap().get(ActionConst.APPENDER_BAG);
|
switch (appenderName) {
|
||||||
var appender = appenderBag.get(appenderName);
|
case APPENDER_JSON:
|
||||||
if (appender == null) {
|
layout = json();
|
||||||
addError("Could not find an appender named [" + appenderName
|
break;
|
||||||
+ "]. Did you define it below instead of above in the configuration file?");
|
case APPENDER_GCP:
|
||||||
return false;
|
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();
|
||||||
|
|
||||||
|
rootLogger.addAppender(appender);
|
||||||
}
|
}
|
||||||
|
|
||||||
addInfo("Use appender: " + appenderName);
|
private Layout<ILoggingEvent> console() {
|
||||||
rootLogger.addAppender(appender);
|
var layout = new PatternLayout();
|
||||||
return true;
|
layout.setContext(context);
|
||||||
|
layout.setPattern(env(LOGBACK_PATTERN, LOGBACK_PATTERN_DEFAULT));
|
||||||
|
return layout;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Layout<ILoggingEvent> json() {
|
||||||
|
var layout = new JsonLayout();
|
||||||
|
layout.setContext(context);
|
||||||
|
return layout;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Layout<ILoggingEvent> gcp() {
|
||||||
|
var layout = new GcpJsonLayout();
|
||||||
|
layout.setContext(context);
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +1,6 @@
|
||||||
{
|
{
|
||||||
"resources": {
|
"resources": {
|
||||||
"includes": [
|
"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"
|
"pattern": "\\Qio/kokuwa/logback/logback-default.xml\\E"
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<included>
|
|
||||||
|
|
||||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
|
||||||
<withJansi>${CONSOLE_LOG_JANSI:-true}</withJansi>
|
|
||||||
<encoder>
|
|
||||||
<pattern>${CONSOLE_LOG_PATTERN:-%cyan(%d{HH:mm:ss.SSS}) %gray(%-6.6thread) %highlight(%-5level) %magenta(%32logger{32}) %mdc %msg%n}</pattern>
|
|
||||||
<charset>${CONSOLE_LOG_CHARSET:-default}</charset>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
</included>
|
|
|
@ -1,13 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<included>
|
|
||||||
|
|
||||||
<appender name="GCP" class="ch.qos.logback.core.ConsoleAppender">
|
|
||||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
|
||||||
<layout class="io.kokuwa.micronaut.logging.layout.GcpJsonLayout">
|
|
||||||
<serviceName>${SERVICE_NAME}</serviceName>
|
|
||||||
<serviceVersion>${SERVICE_VERSION}</serviceVersion>
|
|
||||||
</layout>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
</included>
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<included>
|
|
||||||
|
|
||||||
<appender name="JSON" class="ch.qos.logback.core.ConsoleAppender">
|
|
||||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
|
||||||
<layout class="io.kokuwa.micronaut.logging.layout.JsonLayout" />
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
</included>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<included>
|
|
||||||
|
|
||||||
<include resource="io/kokuwa/logback/appender-console.xml" />
|
|
||||||
<include resource="io/kokuwa/logback/appender-json.xml" />
|
|
||||||
<include resource="io/kokuwa/logback/appender-gcp.xml" />
|
|
||||||
|
|
||||||
</included>
|
|
|
@ -1,8 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<configuration debug="false" scan="false">
|
<configuration debug="false" scan="false">
|
||||||
|
|
||||||
<include resource="io/kokuwa/logback/base.xml" />
|
|
||||||
|
|
||||||
<logger name="io.micronaut.logging.PropertiesLoggingLevelsConfigurer" levels="WARN" />
|
<logger name="io.micronaut.logging.PropertiesLoggingLevelsConfigurer" levels="WARN" />
|
||||||
|
|
||||||
<root level="INFO">
|
<root level="INFO">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue