Payara Micro: Как войти в систему с помощью slf4j (или log4j2)? - PullRequest
0 голосов
/ 26 февраля 2020

Я использую Payara Micro (в комплекте ueberjar) для недавнего проекта, но у меня проблемы с регистрацией. Похоже, Payara Micro использует JUL по умолчанию, что не соответствует моим потребностям. Я хотел бы использовать Log4J 2 вместо этого, предпочтительно через slf4j. К сожалению, я не мог найти много информации. Для начала, я хотел бы обратиться к следующей ссылке ...

https://blog.payara.fish/the-basics-of-logging-in-payara-server

... где написано: «Payara Micro также можно настроить использовать другие каркасы журналирования, такие как Logback и Log4J2. " Звучит великолепно, но единственным источником, имеющим дело с этим вопросом, является следующий пример проекта: https://github.com/hei1233212000/payara-micro-log4j2. Все же это с 2017 года и, кажется, устарело, так как не использует плагин Payara Micro Maven. Тем не менее, я предполагаю, что смысл:

  • добавить необходимые файлы журнала в комплект
  • настроить файл манифеста, добавив файлы в путь к классам
  • , используя SLF4JBridgeHandler для Payara Micro

Я попытал счастья, добавив jar-файлы как customJars через плагин payara micro maven, что действительно привело к созданию объединенного jar-файла с этими библиотеками в MICRO-INF / lib. Из того, что я прочитал, банки также должны быть в classpath, хотя они не отображаются в файле Manifest. Кроме того, я добавил logging.properties к следующему простому содержимому в src / main / resources:

handlers=org.slf4j.bridge.SLF4JBridgeHandler

Теперь, если я запускаю связанный jar-файл, он говорит: Не удается загрузить обработчик журнала " org.slf4j.bridge.SLF4JBridgeHandler ", за которым следует ужасная трассировка стека. И все же класс org.slf4j.bridge.SLF4JBridgeHandler находится в одной из добавленных мною фляг. Я уже экспериментировал со сценарием groovy из приведенного выше примера, чтобы редактировать файл Manifest, но я не мог понять, как его правильно настроить. Я имею в виду, что сценарий сработал, и я получил отредактированный файл манифеста, но он не добавлен в прилагаемую флягу - я полагаю, у меня плохое время. Не говоря уже о том, что это своего рода хаки sh, как сказал автор примера.

Интересно, если я не добавлю свойства logging.properties в банку, оставив тем самым настройку регистрации в Payara Micros без изменений, Я могу перенаправить вывод журнала из сторонних библиотек (таких как 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>

1 Ответ

1 голос
/ 05 марта 2020

это невозможно, просто добавив библиотеки журналов в качестве пользовательских JAR-файлов, так как журналирование инициализируется до загрузки этих библиотек.

Однако есть решение, как использовать альтернативные библиотеки журналов. Вам нужно запустить Payara Micro по-другому. Если вы поместите его в путь к классам и запустите основной класс Payara Micro напрямую, вы также можете поместить пользовательские библиотеки журналов в путь к классам, и они будут подхвачены во время загрузки, прежде чем будет инициализирована регистрация. Если у вас есть payara-micro.jar, slf4j.jar, log4j.jar и jul-to-slf4j.jar в текущем каталоге, вы можете запустить Payara Micro следующим образом:

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, которые приняты JAR Payara Micro.

...