3

java.util.loggingログとSystem。(out | err)出力をslf4jにパイプする方法について読みました。

ただし、突堤の起動時にいくつかのjar/クラスとコードを実行する必要があります。基本的に次のようなものです。

SLF4JBridgeHandler.install() // to pipe j.u.l SysOutOverSLF4J.sendSystemOutAndErrToSLF4J() // to pipe System.(out|err)

jettyで利用可能な必要なjar/クラスを追加する方法は知っていますが(sysout-over-slf4j.jarとjul-to-slf4j.jarを$ JETTY_HOME / lib / extに追加するだけです)、どうすれば実行できますか? jettyが統合された出力(sysoutとjul)をslf4jに構成するように、サーバーの起動時にabobeをコーディングします。そのコードはWebアプリごとに実行できますが、正確に言うと、この動作を必要とするすべてのWebアプリではなく、jettyで実行する必要があります。

これは別の方法で行う必要がありますか?これを行うための非voodoの方法はありますか?

桟橋バージョン>=8の回答にしてください

4

1 に答える 1

1

これがうまくいくかどうかはわかりませんが、試してみましたか?

public class MyWebappServlet ... {
  static {
    // to pipe j.u.l
    SLF4JBridgeHandler.install();

    // to pipe System.(out|err)
    SysOutOverSLF4J.sendSystemOutAndErrToSLF4J();
  }
  ...

そしてあなたの中でweb.xml

<servlet>
  <servlet-name>MyWebapp</servlet-name>
  <servlet-class>MyWebappServlet</servlet-class>
</servlet>

最初からすべてをインターセプトするわけではないかもしれませんが、JettyがクラスをロードしたらMyWebappServlet、ロギングをリダイレクトする必要があります。

それ以外の場合は、これらの2行でJettyをカスタマイズする必要があります。

更新: もう1つの方法があります。BCELmain()のようなラッパーを使用してJettyを起動しますが、これらのロギングリダイレクトが実行された後でのみです。

この場合、コマンドラインは次のようになります。

java my.custom.JavaWrapper org.eclipse.jetty.start.Main [arguments]

これをで行うことができればjetty.sh、そのサーバーインスタンス内のすべてのWebアプリケーションに適用されます。

于 2013-04-17T12:47:35.163 に答える