0

raven-log4jを使用してyoutrackの例外を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>

元の upstart ファイルの一部:

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-*.jarlibフォルダにはありません:

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

なぜ、どこで 2 回ロードされたのですか?

4

1 に答える 1

0

これはGitHubで解決されました

注目に値することの 1 つは、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 もアプリケーションによって 2 回初期化されました (ログ行: Init web application log4j location: /tmp/youtrack-example/log4j.xml)。最初の呼び出しは常に ClassCastException で失敗しますが、 2 つ目は、RavenFactory (以下に含まれる) を介した Raven インスタンスの初期化に失敗します。 ServiceLoader によって提供される自動登録ファクトリーを使用する場合と、ファクトリーを明示的に提供する場合の両方で、同じ結果が得られます。

于 2016-01-11T20:02:42.747 に答える