Logsta sh -Logback Encoder: «IllegalAccessError: не удалось получить доступ к классу […]» - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь отправить журналы из приложения java с приложением Logsta sh tcp socket в logsta sh. Приложение java. уже работает с logback 1.1.9 (slf4j) и другими приложениями.

Теперь я добавил следующие строки в logback-тест. xml:

<configuration>
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>[IP]:5010</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <fieldNames>
                <message>log_msg</message>
            </fieldNames>
        </encoder>
        <keepAliveDuration>5 minutes</keepAliveDuration>
    </appender>

<root>
<level value="info"/>
<appender-ref ref="logstash" />
</root>
</configuration>

Но когда я добавляю appender и запускаю приложение java, я получаю сообщение об ошибке из JVM Launcher «A Java Исключение произошло» и я получаю следующий текст консоли:

Exception in thread "main" java.lang.IllegalAccessError: failed to access class ch.qos.logback.core.status.OnPrintStreamStatusListenerBase from class net.logstash.logback.status.LevelFilteringStatusListener (ch.qos.logback.core.status.OnPrintStreamStatusListenerBase and net.logstash.logback.status.LevelFilteringStatusListener are in unnamed module of loader 'app')
    at net.logstash.logback.status.LevelFilteringStatusListener.setDelegate(LevelFilteringStatusListener.java:67)
    at net.logstash.logback.appender.AsyncDisruptorAppender.start(AsyncDisruptorAppender.java:370)
    at net.logstash.logback.appender.AbstractLogstashTcpSocketAppender.start(AbstractLogstashTcpSocketAppender.java:1009)
    at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90)
    at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
    at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
    at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
    at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:158)
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:145)
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:103)
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
    at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
    at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
    at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
    at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)

Я включил logsta sh 6.3. Jar-файл, и из-за этой ошибки я также попробовал его с более старой версией 4.9. Кто-нибудь знает, совместимо ли это с logback 1.1.9? Я не использую Spring-Boot.

--------- Edit 17.02.2020 -----------

Мой ввод logsta sh .conf файл (потому что я не получаю никаких журналов из моего java приложения):

input {
   tcp {
      mode => "server"
      port => 5010
      codec => json
   }
}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Решение:

Я обновил logback с 1.1.9 до 1.2.3. Когда я заменил jar-файлы и добавил их в путь к классам, я получил более 600 раз следующее сообщение об ошибке: Logger cannot be resolved to a type. Я исправил это, открыв свойства из проекта logback, выбрав «Порядок и экспорт» и установив маркер в каждом флажке -> Применить и закрыть. Теперь я больше не получаю IllegalAccessError, и мое java приложение работает нормально. И я также теперь вижу журналы в Logsta sh и Kibana :)

Я скачал следующие файлы:

  • jcl-over-slf4j 1.7.25
  • jul-to-slf4j 1.7.25
  • log4j-over-slf4j 1.7.25
  • slf4j-api 1.7.25
  • logback-classi c 1.2. 3
  • logback-core 1.2.3

Я скачал их отсюда:

https://mvnrepository.com/artifact/ch.qos.logback/logback-classic/1.2.3

0 голосов
/ 17 февраля 2020

Вы можете избежать исключения, с которым столкнулись, применив любое из следующих решений:

A) Использовать версию журнала>> 1.1.10

ИЛИ

B) Добавить <addDefaultStatusListener>false</addDefaultStatusListener> к определению вашего аппендера (см. Подробности здесь )

ИЛИ

C) Добавьте прослушиватель статуса в конфигурацию входа в систему ( что не позволяет logsta sh -logback-encoder добавить прослушиватель состояния по умолчанию).

Исключение возникает из-за того, что logsta sh -logback-encoder версии> = 6.0 ссылаются на класс ch.qos.logback.core.status.OnPrintStreamStatusListenerBase logback при добавлении прослушиватель состояния по умолчанию . OnPrintStreamStatusListenerBase был сделан publi c в logback 1.1.10, и до этого был закрытым пакетом.

Применение любого из вышеперечисленных решений позволит избежать возникшего исключения. Однако имейте в виду, что версии logsta sh -logback-encoder> = 4.8 скомпилированы и протестированы на logback 1.2.x. Поэтому вы можете столкнуться с другими ошибками при использовании logback 1.1.x. Файл readme logsta sh -logback-encoder содержит следующую инструкцию для этой топи c:

Более старые версии, чем те, которые указаны в файле pom, могут работать, но версии в файле pom это то, против чего было проведено тестирование.

...