|
| 1 | +package io.avaje.simplelogger.graalvm; |
| 2 | + |
| 3 | +import org.graalvm.nativeimage.hosted.Feature; |
| 4 | +import org.graalvm.nativeimage.hosted.RuntimeClassInitialization; |
| 5 | + |
| 6 | +/** |
| 7 | + * GraalVM Native Image build Feature that initialises Simple Logger classes at Build time. |
| 8 | + * <p> |
| 9 | + * Use this when using slf4j-jdk-platform-logging to redirect System.Logger to slf4j. This |
| 10 | + * is needed as GraalVM by default initialised JDK logging at build time. Adding this |
| 11 | + * feature supports redirecting System.Logger to avaje simple logger by also initialising |
| 12 | + * the avaje simple logger classes at build time. |
| 13 | + * </p> |
| 14 | + */ |
| 15 | +public class BuildInitialization implements Feature { |
| 16 | + |
| 17 | + @Override |
| 18 | + public void beforeAnalysis(BeforeAnalysisAccess access) { |
| 19 | + |
| 20 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.FilterBuilder$PatternFilter")); |
| 21 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.FilterBuilder$ReflectiveInvocation")); |
| 22 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.FilterBuilder$SpringFilter")); |
| 23 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.FilterBuilder$Generated")); |
| 24 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.FilterBuilder$Group")); |
| 25 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.FilterBuilder$JDKInternals")); |
| 26 | + |
| 27 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.StackElementFilter")); |
| 28 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.AbbreviatorByLength")); |
| 29 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.AbbreviatorCaching")); |
| 30 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.StackHasher")); |
| 31 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.ThrowableConverter")); |
| 32 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.JsonEncoder")); |
| 33 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.JsonWriter")); |
| 34 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.simplelogger.encoder.SimpleLogger")); |
| 35 | + |
| 36 | + |
| 37 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.json.stream.core.JsonNames")); |
| 38 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.json.stream.core.CoreJsonStream")); |
| 39 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.json.stream.core.HybridBufferRecycler$XorShiftThreadProbe")); |
| 40 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.json.stream.core.HybridBufferRecycler")); |
| 41 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.json.stream.core.HybridBufferRecycler$StripedLockFreePool")); |
| 42 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("io.avaje.json.stream.core.Recyclers$ThreadLocalPool")); |
| 43 | + |
| 44 | + // check for optional SLF4JPlatformLogger |
| 45 | + Class<?> slfPlatform = access.findClassByName("org.slf4j.jdk.platform.logging.SLF4JPlatformLogger"); |
| 46 | + if (slfPlatform != null) { |
| 47 | + RuntimeClassInitialization.initializeAtBuildTime(slfPlatform); |
| 48 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("org.slf4j.jdk.platform.logging.SLF4JPlatformLoggerFactory")); |
| 49 | + RuntimeClassInitialization.initializeAtBuildTime(access.findClassByName("org.slf4j.jdk.platform.logging.SLF4JSystemLoggerFinder")); |
| 50 | + } |
| 51 | + } |
| 52 | + |
| 53 | +} |
0 commit comments