logstash logback编码器:“illegalaccesserror:未能访问类[…]”

wxclj1h5  于 2021-07-12  发布在  Java
关注(0)|答案(3)|浏览(477)

我尝试将日志从带有logstash tcp socket appender的java应用程序发送到logstash。java应用程序。已经可以与logback 1.1.9(slf4j)和其他appender一起使用。
现在,我在logback-test.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启动程序中得到一个错误“发生了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)

我包含了logstash6.3jar文件,由于这个错误,我还尝试了一个旧版本4.9。有人知道这是否与logback1.1.9兼容吗?我没用Spring Boot。
---------编辑:17.02.2020

tpxzln5u

tpxzln5u1#

我对logstash.conf文件的输入(因为我没有从java应用程序获得任何日志):

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

nxagd54h2#

通过应用以下任一解决方案,可以避免遇到异常:
a) 使用logback版本>=1.1.10

b) 添加 <addDefaultStatusListener>false</addDefaultStatusListener> 添加到appender定义(请参阅此处的详细信息)

c) 在logback配置中添加一个状态监听器(这会阻止logstash logback编码器添加一个默认的状态监听器)。
由于logstash logback编码器版本>=6.0引用logback的 ch.qos.logback.core.status.OnPrintStreamStatusListenerBase 在添加默认状态侦听器时初始化。 OnPrintStreamStatusListenerBase 在Logback1.1.10中公开,在此之前是包私有的。
应用上述任何解决方案都可以避免遇到异常。但是,请记住logstash logback编码器版本>=4.8是针对logback 1.2.x编译和测试的。因此,使用logback1.1.x时可能会遇到其他错误。logstash logback编码器自述文件包含有关此主题的以下语句:
比pom文件中指定的版本旧的版本可能可以工作,但是pom文件中的版本是测试所针对的。

t8e9dugd

t8e9dugd3#

解决方案:
我将logback从1.1.9更新到1.2.3。在替换jar文件并将其添加到类路径时,我收到了600多次以下错误消息: Logger cannot be resolved to a type . 我通过打开logback项目中的属性、执行“order and export”并在每个复选框-->apply and close中设置一个标记来解决这个问题。现在我再也没有遇到illegalaccesserror了,我的java应用程序运行良好。我现在也可以在logstash和kibana中看到日志:)
我下载了以下文件:
jcl-over-slf4j 1.7.25型
7月至slf4j 1.7.25
log4j-over-slf4j 1.7.25
slf4j api 1.7.25标准
logback经典1.2.3
logback核心1.2.3
我从这里下载的:
https://mvnrepository.com/artifact/ch.qos.logback/logback-classic/1.2.3

相关问题