Я использую 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>