0

我正在尝试使用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/local/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

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

4

1 回答 1

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 中(例如 Jackson、Guava 等),因为我们没有不要用 raven JAR 组装或隐藏这些依赖项。不过,我不认为这会导致问题。

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

于 2016-01-11T20:02:42.747 回答