Java 17+ 本机图像日志记录

问题描述 投票:0回答:1

如何配置maven使用logback编译原生镜像?
这是我的环境:

<dependencies>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <configuration>
                    <imageName>output</imageName>
                    <mainClass>ir.moke.ni.MainClass</mainClass>
                    <buildArgs>
                        <buildArgs>--initialize-at-build-time=ch.qos.logback,org.slf4j</buildArgs>
                        <buildArgs>-H:ReflectionConfigurationFiles=src/main/resources/META-INF/reflection-config.json</buildArgs>
                        <buildArg>-H:IncludeResources=logback.xml</buildArg>
                        <buildArg>-H:+UnlockExperimentalVMOptions</buildArg>
                        <buildArg>-H:Log=registerResource:5</buildArg>
                        <buildArg>--initialize-at-build-time=ch.qos.logback,org.slf4j</buildArg>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

logback.xml:

<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>

    <logger name="ir.moke" level="debug" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>

    <root level="error">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

reflection-config.json:

[
  {
    "name": "ch.qos.logback.classic.pattern.DateConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.MessageConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.ThrowableProxyConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.NopThrowableInformationConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.ContextNameConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.BoldYellowCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.LoggerConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.ReplacingCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.BoldBlueCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.CyanCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.RedCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.WhiteCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.PropertyConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.MethodOfCallerConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.LevelConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.IdentityCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.BoldWhiteCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.MarkerConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.BoldCyanCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.BoldMagentaCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.RelativeTimeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.MagentaCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.ClassOfCallerConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.LineOfCallerConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.FileOfCallerConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.BoldGreenCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.LocalSequenceNumberConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.YellowCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.color.HighlightingCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.GrayCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.MDCConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.ClassOfCallerConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.BoldRedCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.GreenCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.core.pattern.color.BlackCompositeConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.ThreadConverter",
    "allDeclaredConstructors": true
  },
  {
    "name": "ch.qos.logback.classic.pattern.LineSeparatorConverter",
    "allDeclaredConstructors": true
  }
]

我的简单主课:

package ir.moke.ni;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MainClass {
    private static final Logger logger = LoggerFactory.getLogger(MainClass.class);

    static {
        System.out.println("Application started");
    }
    public static void main(String[] args) {
        logger.info("This is INFO log");
        logger.warn("This is WARN log");
        logger.debug("This is DEBUG log");
        logger.error("This is ERROR log");
        logger.trace("This is TRACE log");
    }
}

这是目录树:

logback-project/
├── pom.xml
└── src
    └── main
        ├── java
        │   └── ir
        │       └── moke
        │           └── ni
        │               └── MainClass.java
        └── resources
            ├── logback.xml
            └── META-INF
                └── reflection-config.json

项目生成原生图像没有任何问题,但日志不起作用!
如何解决这个问题?
注意:我尝试制作一系列有关原生图像的教育项目,但我无法解决这个问题! 教程项目存储库


更新:
有趣的是,我以编程方式实现了 logback(没有 logback.xml),这个项目确实可以正常工作。

java logback graalvm graalvm-native-image
1个回答
0
投票

按如下方式更新构建时初始化:-

--initialize-at-build-time=org.apache.commons.logging.LogFactory,org.apache.commons.logging.LogFactoryService,org.slf4j.MDC,ch.qos.logback.core.pattern.parser.Parser,ch.qos.logback.core.util.Loader,ch.qos.logback.core.util.StatusPrinter,org.slf4j.impl.StaticLoggerBinder,org.slf4j.LoggerFactory,ch.qos.logback.classic.Logger,ch.qos.logback.core.spi.AppenderAttachableImpl,ch.qos.logback.core.status.StatusBase,ch.qos.logback.classic.Level,ch.qos.logback.core.status.InfoStatus,ch.qos.logback.classic.PatternLayout,ch.qos.logback.core.CoreConstants
© www.soinside.com 2019 - 2024. All rights reserved.