我正在使用Payara微(捆绑ueberjar)最近的一个项目,但我在日志方面有困难。似乎Payara公司默认使用JUL,这不适合我的需要。我想用Log4J 2代替,最好是通过slf4j。不幸的是,我找不到多少信息。首先,我想参考以下链接..。
https://blog.payara.fish/the-basics-of-logging-in-payara-server
..。上面写着:“PayaraMicro也可以进行调整,以使用其他日志框架,比如Logback和Log4J2。”听起来不错,但处理这一问题的唯一来源似乎是以下示例项目:https://github.com/hei1233212000/payara-micro-log4j2。然而,这是从2017年开始,似乎已经过时了,因为它没有使用payara微maven插件。不过,我想重点是:
我尝试通过payara微maven插件将这些jar添加为customJars,这确实导致了一个捆绑的jar,其中包含了micro /lib下的那些库。据我所读,这些jars也应该在类路径上,尽管它们没有出现在Manifest文件中。另外,我在src/main/ logging.properties下添加了以下简单内容:
handlers=org.slf4j.bridge.SLF4JBridgeHandler现在,如果我运行绑定的jar,它说无法加载日志处理程序"org.slf4j.bridge.SLF4JBridgeHandler",后面跟着一个丑陋的堆栈跟踪。然而,类org.slf4j.bridge.SLF4JBridgeHandler在我添加的一个jars中。我已经尝试了上面链接的示例中的groovy脚本来编辑Manifest文件,但是我无法理解如何正确地设置它。我的意思是,脚本起作用了,我得到了一个经过编辑的Manifest文件,但是它没有添加到捆绑的jar中--我想我的时机很糟糕。更不用说,正如示例作者所说的那样,这是一种黑客行为。
有趣的是,如果我不将logging.properties添加到jar中,从而使Payara日志记录设置保持不变,我可以重新路由来自第三方库(例如hibernate)的日志输出,而Payara Micro则会将其自己的日志记录到控制台。然而,这不是我的目标,因为我对后一个日志更感兴趣。
所以,如果有人能帮我,我会很感激的。感谢您的阅读。为了完整起见,这里是我的pom.xml (我正在使用包配置文件,另一个只用于黄瓜测试):
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.kepes.payara-micro</groupId>
<artifactId>payara-micro</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<failOnMissingWebXml>false</failOnMissingWebXml>
<skipTests>true</skipTests>
<payara-micro.version>5.194</payara-micro.version>
<payara-micro.plugin.version>1.0.6</payara-micro.plugin.version>
<jakarta.version>8.0.0</jakarta.version>
<maven-failsafe.plugin.version>2.22.2</maven-failsafe.plugin.version>
<cucumber.version>5.4.0</cucumber.version>
<websocket.version>1.4.0</websocket.version>
<log4j.version>2.13.0</log4j.version>
<slf4j.version>1.7.30</slf4j.version>
</properties>
<profiles>
<profile>
<id>package</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>fish.payara.maven.plugins</groupId>
<artifactId>payara-micro-maven-plugin</artifactId>
<version>${payara-micro.plugin.version}</version>
<executions>
<execution>
<id>bundle</id>
<phase>package</phase>
<goals>
<goal>bundle</goal>
</goals>
</execution>
<execution>
<id>start</id>
<goals>
<goal>start</goal>
</goals>
</execution>
</executions>
<configuration>
<useUberJar>true</useUberJar>
<deployWar>true</deployWar>
<payaraVersion>${payara-micro.version}</payaraVersion>
<customJars>
<customJar>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.version}</version>
</customJar>
<customJar>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</customJar>
<customJar>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</customJar>
<customJar>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</customJar>
<customJar>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</customJar>
</customJars>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>test</id>
<properties>
<skipTests>false</skipTests>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe.plugin.version}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
<plugin>
<groupId>fish.payara.maven.plugins</groupId>
<artifactId>payara-micro-maven-plugin</artifactId>
<version>${payara-micro.plugin.version}</version>
<executions>
<execution>
<id>pre-integration-payara</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>post-integration-payara</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
<configuration>
<payaraVersion>${payara-micro.version}</payaraVersion>
<deployWar>true</deployWar>
<contextRoot>/</contextRoot>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>${jakarta.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>${websocket.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
发布于 2020-03-05 09:15:46
这是不可能的,仅仅通过添加日志库作为自定义JAR,在加载这些库之前初始化日志记录。
但是,有一种解决方案是如何使用替代日志库。你需要以一种不同的方式运行Payara微系统。如果您将其放在类路径上并直接运行Payara Micro类,您也可以将自定义日志库放在类路径上,并且在初始化日志之前,它们将在启动时被捕获。如果您在当前目录中有payara-micro.jar、slf4j.jar、log4j.jar和jl-to-slf4j.jar,您可以像这样启动PayaraMicro.jar:
java -cp ./payara-micro.jar:slf4j.jar:log4j2.jar:jul-to-slf4j.jar fish.payara.micro.PayaraMicro some.war或者,您可以将那些日志JAR移动到子目录lib,并缩短命令行:
java -cp "./payara-micro.jar:lib/*" fish.payara.micro.PayaraMicro some.war您可以将相同的参数传递给被PayaraMicro接受的PayaraMicro类。
https://stackoverflow.com/questions/60421839
复制相似问题