首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >佩亚拉微:如何使用slf4j (或log4j2)登录?

佩亚拉微:如何使用slf4j (或log4j2)登录?
EN

Stack Overflow用户
提问于 2020-02-26 20:12:57
回答 1查看 2.2K关注 0票数 1

我正在使用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插件。不过,我想重点是:

  • 通过将jars添加到类路径
  • 将必要的日志罐添加到包
  • 调整报表文件中使用SLF4JBridgeHandler for Payara Micro

我尝试通过payara微maven插件将这些jar添加为customJars,这确实导致了一个捆绑的jar,其中包含了micro /lib下的那些库。据我所读,这些jars也应该在类路径上,尽管它们没有出现在Manifest文件中。另外,我在src/main/ logging.properties下添加了以下简单内容:

代码语言:javascript
复制
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 (我正在使用包配置文件,另一个只用于黄瓜测试):

代码语言:javascript
复制
<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>

EN

回答 1

Stack Overflow用户

发布于 2020-03-05 09:15:46

这是不可能的,仅仅通过添加日志库作为自定义JAR,在加载这些库之前初始化日志记录。

但是,有一种解决方案是如何使用替代日志库。你需要以一种不同的方式运行Payara微系统。如果您将其放在类路径上并直接运行Payara Micro类,您也可以将自定义日志库放在类路径上,并且在初始化日志之前,它们将在启动时被捕获。如果您在当前目录中有payara-micro.jar、slf4j.jar、log4j.jar和jl-to-slf4j.jar,您可以像这样启动PayaraMicro.jar:

代码语言:javascript
复制
java -cp ./payara-micro.jar:slf4j.jar:log4j2.jar:jul-to-slf4j.jar fish.payara.micro.PayaraMicro some.war

或者,您可以将那些日志JAR移动到子目录lib,并缩短命令行:

代码语言:javascript
复制
java -cp "./payara-micro.jar:lib/*" fish.payara.micro.PayaraMicro some.war

您可以将相同的参数传递给被PayaraMicro接受的PayaraMicro类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60421839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档