From 46a8891f5e4380e7518d0da210854a1fcfec1472 Mon Sep 17 00:00:00 2001 From: Sergio del Amo Date: Mon, 26 Dec 2022 08:40:48 +0100 Subject: [PATCH] fix: graal error for private @Property Changes to inject @Property(name = "logger.config") via constructor injection. Graal 22.3 and Micronaut 3.8.0 was throwing: ``` Caused by: java.lang.NoSuchFieldError: No field 'logbackXmlLocation' found for type: io.micronaut.management.endpoint.loggers.impl.LogbackLoggingSystem 195 at io.micronaut.core.reflect.ReflectionUtils.lambda$getRequiredField$2(ReflectionUtils.java:294) 196 at java.base@17.0.5/java.util.Optional.orElseThrow(Optional.java:403) 197 at io.micronaut.core.reflect.ReflectionUtils.getRequiredField(ReflectionUtils.java:294) 198 at io.micronaut.context.AbstractInitializableBeanDefinition.setFieldWithReflection(AbstractInitializableBeanDefinition.java:979) 199 ... 113 common frames omitted ``` --- .../loggers/impl/LogbackLoggingSystem.java | 18 ++++++++++-------- .../logging/impl/LogbackLoggingSystem.java | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/management/src/main/java/io/micronaut/management/endpoint/loggers/impl/LogbackLoggingSystem.java b/management/src/main/java/io/micronaut/management/endpoint/loggers/impl/LogbackLoggingSystem.java index 4f0ef79d681..c77506805c0 100644 --- a/management/src/main/java/io/micronaut/management/endpoint/loggers/impl/LogbackLoggingSystem.java +++ b/management/src/main/java/io/micronaut/management/endpoint/loggers/impl/LogbackLoggingSystem.java @@ -24,6 +24,7 @@ import io.micronaut.context.annotation.Replaces; import io.micronaut.context.annotation.Requires; import io.micronaut.core.annotation.NonNull; +import io.micronaut.core.annotation.Nullable; import io.micronaut.logging.LogLevel; import io.micronaut.logging.LoggingSystemException; import io.micronaut.management.endpoint.loggers.LoggerConfiguration; @@ -35,7 +36,6 @@ import java.net.URL; import java.util.Collection; import java.util.Objects; -import java.util.Optional; import java.util.stream.Collectors; /** @@ -51,8 +51,11 @@ public class LogbackLoggingSystem implements ManagedLoggingSystem, io.micronaut.logging.LoggingSystem { private static final String DEFAULT_LOGBACK_LOCATION = "logback.xml"; - @Property(name = "logger.config") - private Optional logbackXmlLocation; + private final String logbackXmlLocation; + + public LogbackLoggingSystem(@Nullable @Property(name = "logger.config") String logbackXmlLocation) { + this.logbackXmlLocation = logbackXmlLocation != null ? logbackXmlLocation : DEFAULT_LOGBACK_LOCATION; + } @Override @NonNull @@ -117,18 +120,17 @@ private static Level toLevel(LogLevel logLevel) { return Level.valueOf(logLevel.name()); } } - + @Override public void refresh() { LoggerContext context = getLoggerContext(); context.reset(); - String logbackXml = logbackXmlLocation.orElse(DEFAULT_LOGBACK_LOCATION); - URL resource = getClass().getClassLoader().getResource(logbackXml); + URL resource = getClass().getClassLoader().getResource(logbackXmlLocation); if (Objects.isNull(resource)) { - throw new LoggingSystemException("Resource " + logbackXml + " not found"); + throw new LoggingSystemException("Resource " + logbackXmlLocation + " not found"); } - try { + try { new ContextInitializer(context).configureByResource(resource); } catch (JoranException e) { throw new LoggingSystemException("Error while refreshing Logback", e); diff --git a/runtime/src/main/java/io/micronaut/logging/impl/LogbackLoggingSystem.java b/runtime/src/main/java/io/micronaut/logging/impl/LogbackLoggingSystem.java index a8b72e2b0ca..9aa81b153d5 100644 --- a/runtime/src/main/java/io/micronaut/logging/impl/LogbackLoggingSystem.java +++ b/runtime/src/main/java/io/micronaut/logging/impl/LogbackLoggingSystem.java @@ -45,7 +45,7 @@ public final class LogbackLoggingSystem implements LoggingSystem { private static final String DEFAULT_LOGBACK_LOCATION = "logback.xml"; - private String logbackXmlLocation; + private final String logbackXmlLocation; public LogbackLoggingSystem(@Nullable @Property(name = "logger.config") String logbackXmlLocation) { this.logbackXmlLocation = logbackXmlLocation != null ? logbackXmlLocation : DEFAULT_LOGBACK_LOCATION;