javafx - 当 运行 来自构建的自定义运行时图像的应用程序时出现 log4j2 问题
javafx - log4j2 issue when running the app from builded custom runtime image
我创建了多模块 javafx 应用程序,我在其中使用 log4j2 进行日志记录。
构建工具是maven。
我什么时候 运行 它 mvn clean javafx:run
一切都按预期工作 - 没有问题。
但是当我想运行创建运行时候的镜像(用mvn clean compile创建javafx:jlink)
我可以看到日志记录不起作用,并且我在控制台中收到以下错误:
错误 StatusLogger Log4j2 找不到日志记录实现。请将 log4j-core 添加到类路径中。使用SimpleLogger登录控制台...
根据我的搜索,log4j2 似乎是非模块化的问题,解决方案是为 gradle (badass-jlink-plugin.beryx.org) 创建的,不幸的是,我不允许使用 gradle 并且我没有找到与 Maven 类似的东西。但我可能是错的...
有人可以帮忙吗?
这是 pom 文件:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>some.group</groupId>
<artifactId>artifact</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>14</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>14</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.4</version>
<configuration>
<stripDebug>true</stripDebug>
<compress>2</compress>
<noHeaderFiles>true</noHeaderFiles>
<noManPages>true</noManPages>
<launcher>myApp</launcher>
<jlinkImageName>myApp</jlinkImageName>
<jlinkZipName>myApp</jlinkZipName>
<mainClass>some.group.artifact.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
这里是模块信息:
module some.group.artifact {
requires javafx.controls;
requires javafx.fxml;
requires transitive javafx.graphics;
requires javafx.base;
requires java.xml.bind;
requires com.sun.xml.bind;
requires org.apache.logging.log4j;
opens some.group.artifact.controllers to java.xml.bind, javafx.fxml;
opens some.group.artifact to javafx.fxml;
exports some.group.artifact.controllers;
exports some.group.artifact;
}
这是保存在 src/main/resources 文件夹下的 log4j2 属性文件:
status = error
name = Log4j2PropertiesConfig
# change log file name as per your requirement
property.filename = ${sys:user.home}/logs
appenders = console, rolling
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
#appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%t] %c{1}- %msg%n
appender.console.layout.pattern = %d [%-5level] [%t] %logger{-2} - %msg%n%throwable
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}/log.log
appender.rolling.filePattern = ${filename}/history/%d{yyyy-MM-dd-HH-mm-ss}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %p %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.startup.type = OnStartupTriggeringPolicy
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=10Mb
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 100
loggers = rolling
logger.rolling.name = some.group.artifact
logger.rolling.level = info
logger.rolling.additivity = true
logger.rolling.appenderRef.rolling.ref = RollingFile
rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
感谢您的时间和精力!
我通过切换到 gradle 并使用 badass-jlink-plugin 来修复它。beryx.org ...
我创建了多模块 javafx 应用程序,我在其中使用 log4j2 进行日志记录。 构建工具是maven。
我什么时候 运行 它 mvn clean javafx:run 一切都按预期工作 - 没有问题。
但是当我想运行创建运行时候的镜像(用mvn clean compile创建javafx:jlink) 我可以看到日志记录不起作用,并且我在控制台中收到以下错误:
错误 StatusLogger Log4j2 找不到日志记录实现。请将 log4j-core 添加到类路径中。使用SimpleLogger登录控制台...
根据我的搜索,log4j2 似乎是非模块化的问题,解决方案是为 gradle (badass-jlink-plugin.beryx.org) 创建的,不幸的是,我不允许使用 gradle 并且我没有找到与 Maven 类似的东西。但我可能是错的...
有人可以帮忙吗?
这是 pom 文件:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>some.group</groupId>
<artifactId>artifact</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>14</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>14</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.4</version>
<configuration>
<stripDebug>true</stripDebug>
<compress>2</compress>
<noHeaderFiles>true</noHeaderFiles>
<noManPages>true</noManPages>
<launcher>myApp</launcher>
<jlinkImageName>myApp</jlinkImageName>
<jlinkZipName>myApp</jlinkZipName>
<mainClass>some.group.artifact.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
这里是模块信息:
module some.group.artifact {
requires javafx.controls;
requires javafx.fxml;
requires transitive javafx.graphics;
requires javafx.base;
requires java.xml.bind;
requires com.sun.xml.bind;
requires org.apache.logging.log4j;
opens some.group.artifact.controllers to java.xml.bind, javafx.fxml;
opens some.group.artifact to javafx.fxml;
exports some.group.artifact.controllers;
exports some.group.artifact;
}
这是保存在 src/main/resources 文件夹下的 log4j2 属性文件:
status = error
name = Log4j2PropertiesConfig
# change log file name as per your requirement
property.filename = ${sys:user.home}/logs
appenders = console, rolling
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
#appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%t] %c{1}- %msg%n
appender.console.layout.pattern = %d [%-5level] [%t] %logger{-2} - %msg%n%throwable
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}/log.log
appender.rolling.filePattern = ${filename}/history/%d{yyyy-MM-dd-HH-mm-ss}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %p %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.startup.type = OnStartupTriggeringPolicy
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=10Mb
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 100
loggers = rolling
logger.rolling.name = some.group.artifact
logger.rolling.level = info
logger.rolling.additivity = true
logger.rolling.appenderRef.rolling.ref = RollingFile
rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
感谢您的时间和精力!
我通过切换到 gradle 并使用 badass-jlink-plugin 来修复它。beryx.org ...