java.lang.ClassCastException:net.kencochrane.raven.log4j.Ent



我正试图使用raven-log4j将youtrack的异常发送到哨兵。

/etc/youtrack/log4j.xml:

<appender name="sentry" class="net.kencochrane.raven.log4j.SentryAppender">
  <param name="dsn" value="https://publicKey:secretKey@host:port/1"/>
  <filter class="org.apache.log4j.varia.LevelRangeFilter">
    <param name="levelMin" value="WARN"/>
  </filter>
</appender>
<root>
    <priority value="INFO"/>
    <appender-ref ref="SYSLOG"/>
    <appender-ref ref="sentry"/>
</root>

原始暴发户文件的一部分:

exec-java-Xmx{{heap_size}}-XX:MaxPermSize=250m-Djava.awt.headless=true-Djetbrains.youtrack.disableBrowser=true-Djava.security.egd=/dev/zrandom-Djetbrains.mps.webr.log4jPath=/etc/youtrack/log4j.xml-jar/usr/local/youtrack/{{jarfile}}8082

我把它改成:

exec java-Xmx1g-XX:MaxPermSize=250m-Djava.awt.headless=true-Djetbrains.youtrack.disableBrowser=true-Djava.security.egd=/dev/zrandom-Djetbrains.mps.webr.log4jPath=/etc/youtrack/log4j.xml-cp/usr/local/youtrack/youtrack-6.5.16853.jar:/usr/local/youttrack/lib/*jetbrains.youtrack.standalone.youtrack独立8082

以指定类路径(/usr/local/youtrack/lib/*)。

如果不将raven-log4j-6.0.0.jar复制到/usr/local/youtrack/lib,我将得到这样的错误:

log4j: Class name: [net.kencochrane.raven.log4j.SentryAppender]
log4j:ERROR Could not create an Appender. Reported error follows.
java.lang.ClassNotFoundException: net.kencochrane.raven.log4j.SentryAppender

但在将其放入lib文件夹后,会出现另一个错误:

log4j: Class name: [net.kencochrane.raven.log4j.SentryAppender]
log4j:ERROR Could not create an Appender. Reported error follows.
java.lang.ClassCastException: net.kencochrane.raven.log4j.SentryAppender cannot be cast to org.apache.log4j.Appender

当然,lib文件夹中没有log4j-*.jar

ls -l /usr/local/youtrack/lib/
total 88
-rw-r--r-- 1 root root 79444 Jan  7 14:13 raven-6.0.0.jar
-rw-r--r-- 1 root root  6798 Jan  7 14:35 raven-log4j-6.0.0.jar

为什么在哪里装了两次?

此问题已在GitHub 上解决

值得注意的是,您仍然需要手动添加两个raven的附加依赖项(https://github.com/getsentry/raven-java/tree/master/raven#manual-依赖性管理)和raven-log4j(https://github.com/getsentry/raven-java/tree/master/raven-log4j#manual-依赖性管理),因为我们没有用raven JAR组装或屏蔽这些依赖性。不过,我不认为这会引起这个问题。

此外,据我所知,log4j也被应用程序初始化了两次(日志行:Init web应用程序log4j位置:/tmp/youtrack-example/log4j.xml。)第一次调用总是失败,并出现ClassCastException,而第二次调用则无法通过RavenFactory初始化Raven实例(包括在下面)。)使用ServiceLoader提供的自动注册工厂和显式提供工厂都会产生相同的结果。

相关内容

  • 没有找到相关文章

最新更新