Я был на этом весь день и не заставлял его работать после попытки стольких комбинаций. В конце концов, я ищу явный список шагов, чтобы получить логирование JSON от Карафа. Я даже просмотрел исходный код плагина Maven Karaf, пытаясь разобраться в этом, хотя, возможно, я не смотрел достаточно далеко.
Я использую Karaf 4.2.6. Я пытаюсь построить развертывание Karaf, используя плагин karaf-maven, версия 4.2.6.
Если я изменю свой layout.type
для различных приложений на JsonLayout
, я получу трассировку стека, говорящую, что она может ' загрузить макет JSON, потому что мне не хватает класса. java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/FilterProvider
.
Я посмотрел на банку org.ops4j.pax.logging/pax-logging-log4j2/1.10.2
и обнаружил, что мне нужно 3 банки Джексона, Core v2.8.7, Annotations v2.8.0 и Databind v2.8.7.
Я пытался получить эти файлы в etc/startup.properties
либо с начальным уровнем 5, либо с начальным уровнем 8, чтобы они были готовы к org.ops4j.pax.logging/pax-logging-log4j2/1.10.2
при его запуске. Я убедился, что они находятся в папке system
в правильном месте. Большую часть времени, если я получал их в etc/startup.properties
, у них был начальный уровень 30. Я поместил их в функцию с правильными начальными уровнями, но они либо были запущены после того, что использовалось startup.properties
, либо просто никогда появился. Я перепробовал много возможных комбинаций, startupBundles
, startupFeatures
, bootFeatures
, но ничего не получилось в startup.properties
. Я не мог понять, как сгенерировалось содержимое startup.properties
. Иногда функции, которые я хотел для своего приложения, даже не запускались, потому что что-то в конфигурации блокировалось при настройке ведения журнала, если я просто поместил ссылки на эти jar-файлы в startup.properties
, например
mvn\:com.fasterxml.jackson.core/jackson-core/2.8.7 = 5
Ниже мой pom. xml с комментариями к предыдущим попыткам:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<properties>
<my_version>0.0.0</my_version>
<myapp_common_version>0.0.0</myapp_common_version>
</properties>
<groupId>com.me.myapp</groupId>
<artifactId>myapp-karaf</artifactId>
<version>${my_version}</version>
<packaging>karaf-assembly</packaging>
<name>myapp-karaf</name>
<description>myapp-karaf details</description>
<repositories>
<!-- Apache ServiceMix repository (for region) -->
<repository>
<id>apache.servicemix.m2</id>
<name>Apache ServiceMix M2 repository</name>
<url>http://svn.apache.org/repos/asf/servicemix/m2-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<!-- OPS4J SNAPSHOT repository -->
<repository>
<id>ops4j.sonatype.snapshots.deploy</id>
<name>OPS4J snapshot repository</name>
<url>https://oss.sonatype.org/content/repositories/ops4j-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<!-- Apache SNAPSHOT -->
<repository>
<id>apache.snapshots.deploy</id>
<name>Apache snapshot repository</name>
<url>https://repository.apache.org/content/groups/snapshots-group</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.karaf.features</groupId>
<artifactId>framework</artifactId>
<version>4.2.6</version>
<type>kar</type>
</dependency>
<dependency>
<groupId>org.apache.karaf.features</groupId>
<artifactId>standard</artifactId>
<version>4.2.6</version>
<classifier>features</classifier>
<type>xml</type>
</dependency>
<dependency>
<groupId>org.apache.karaf.features</groupId>
<artifactId>spring</artifactId>
<version>4.2.6</version>
<classifier>features</classifier>
<type>xml</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.karaf.features</groupId>
<artifactId>enterprise</artifactId>
<version>4.2.6</version>
<classifier>features</classifier>
<type>xml</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.me.myapp</groupId>
<artifactId>myapp-common-feature</artifactId>
<version>${myapp_common_version}</version>
<classifier>features</classifier>
<type>xml</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.me.myapp</groupId>
<artifactId>myapp-feature</artifactId>
<!-- Annoyingly this cannot come from an environment variable -->
<version>${my_version}</version>
<classifier>features</classifier>
<type>xml</type>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>${env.MYAPP_SOURCE_HOME}/myapp-common/server/karaf/assembly</directory>
<filtering>false</filtering>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<directory>src/main/filtered-resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.karaf.tooling</groupId>
<artifactId>karaf-maven-plugin</artifactId>
<version>4.2.6</version>
<extensions>true</extensions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>process-resources</id>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.karaf.tooling</groupId>
<artifactId>karaf-maven-plugin</artifactId>
<configuration>
<startupBundles> <!--
<bundle>mvn:com.fasterxml.jackson.core/jackson-annotations/2.8.0</bundle>
<bundle>mvn:com.fasterxml.jackson.core/jackson-core/2.8.7</bundle>
<bundle>mvn:com.fasterxml.jackson.core/jackson-databind/2.8.7</bundle> -->
</startupBundles>
<installedFeatures>
</installedFeatures>
<startupFeatures>
<feature>com.me.myapp/${my_version}</feature>
</startupFeatures>
<bootFeatures>
<feature>com.me.myapp.logging.provider/${myapp_common_version}</feature>
<!-- standard distribution -->
<!-- <feature>standard</feature> -->
<!-- minimal distribution -->
<!--<feature>minimal</feature>-->
<feature>jaas</feature>
<feature>shell</feature>
<feature>ssh</feature>
<feature>management</feature>
<feature>bundle</feature>
<feature>config</feature>
<feature>deployer</feature>
<feature>diagnostic</feature>
<feature>instance</feature>
<feature>kar</feature>
<feature>wrap</feature>
<feature>log</feature>
<feature>package</feature>
<feature>service</feature>
<feature>system</feature>
</bootFeatures>
<javase>1.8</javase>
</configuration>
</plugin>
</plugins>
</build>
</project>
com.me.myapp.logging.provider
содержит банки Джексона с соответствующим начальным уровнем.
I я запускаю свои контейнеры в Kubernetes и хочу, чтобы стандартный сбор журналов в Kubernetes работал. Я использую дополнительный плагин на сборщике логов, чтобы хотя бы несколько разделить вещи в формате JSON, но он подвержен ошибкам, и я бы предпочел просто начать с отформатированных журналов JSON, а не обрабатывать их позже, так что я могу отдельные компоненты журнала, такие как человек, который выполнял операцию, во время регистрации.
Я искал в Переполнении стека, нашел в Google и нашел подсказки, но никаких явных шагов, которые привели бы к решению. Я понимаю, что здесь нет явного списка файлов, но, как я уже сказал, я прошел через много комбинаций. Любая помощь приветствуется. Я также буду публиковать сообщения в группе пользователей Karaf.