java.lang.ClassCastException:net.kencochrane.raven.log4j.SentryAppender无法强制转换为org.apache.log4j.Appender

时间:2016-01-07 14:49:48

标签: java log4j sentry raven

我尝试使用raven-log4jyoutrack发送Sentry例外。

/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 /本地/ youtrack / lib目录/ *   jetbrains.youtrack.standalone.YoutrackStandalone 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

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

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

为什么以及在哪里加载了两次?

1 个答案:

答案 0 :(得分:0)

这已在GitHub

上得到解决
  

值得注意的一点是,您仍然需要手动添加raven(https://github.com/getsentry/raven-java/tree/master/raven#manual-dependency-management)和raven-log4j(https://github.com/getsentry/raven-java/tree/master/raven-log4j#manual-dependency-management)的其他依赖项,这些依赖项尚未包含在YouTrack(例如杰克逊,番石榴等)因为我们没有用乌鸦JAR组装或遮蔽这些依赖关系。不过,我认为这不会导致这个问题。

     

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