2

プロジェクトの stdout/stderr への Restlet のロギングを無効にし、org.restlet.ext.slf4j によって提供される SLF4J ファサードを介してすべての Restlet ロギングを転送したいだけです。これを行う簡単な方法はありますか?

4

6 に答える 6

4

最初に SLF4J を構成して、Restlet のすべての呼び出しを java.util.logging API にインターセプトし、代わりにそれらを SLF4J ファサードの API の呼び出しにマップする必要があります。@Brunoが指摘したように、クラスパスにjul-to-slf4j.jarを配置するだけでこれを行うことができます。

次に、SLF4J ファサードを構成して、その API 呼び出しをロギング実装に転送し、実際のログ メッセージ生成を行う必要があります。Logback ロギングの実装を使用するには、logback-classic.jarをクラスパスにドロップします。

最後に、選択したロギングの実装を構成する必要があります。Logback を使用している場合は、XML を使用して個々のロガーのログ レベルを調整できます。

私たちは Restlet で SLF4J を使用しており、SLF4J がすべての異なるロギング API を 1 つに統合する方法が本当に気に入っています。それは非常にうれしいです。

編集 2019 年 4 月 29 日: @NaftuliKay と @stempler からのコメントを必ず確認してください。Restlet は過去 10 年間で間違いなく変化しました!

于 2010-10-06T04:53:41.587 に答える
3

これは、STDERR へのロギングを無効にし、ロギングを log4j に転送するために行ったことです。基本的には、すべてのレストレットのベースとなる基本クラスです。log4j ブリッジをインストールし、コンソール ハンドラを見つけて無効にします。私にとってはうまくいきますが、最善の解決策ではない可能性があるため、外部構成を必要としないより良い解決策があれば教えてください。

public class CommonRestlet extends Application {

static {
    // Install logging bridge (JUL -> LOG4J)
    SLF4JBridgeHandler.install();

    // Disable annoying console logging of requests..
    Logger logger = Logger.getLogger("org.restlet");
    for (Handler handler : logger.getParent().getHandlers()) {
        // Find the console handler
        if (handler.getClass().equals(java.util.logging.ConsoleHandler.class)) {
            // set level to SEVERE. We could disable it completely with 
            // a custom filter but this is good enough.
            handler.setLevel(Level.SEVERE);
        }
    }
}
// Other common stuff here...
}

pom.xml の依存関係

    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>jul-to-slf4j</artifactId>
       <version>1.6.1</version>
    </dependency>
    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <version>1.6.1</version>
       <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
       </exclusions>
    </dependency>
于 2011-02-10T10:07:18.443 に答える
1

次の方法で、迷惑な Restlet ログを無効にすることができました。

Component component = new Component();

// Disable damn log
component.setLogService(new org.restlet.service.LogService(false));

...

于 2013-08-16T12:34:34.203 に答える
0

私はjul-to-slf4jブリッジを使用する傾向がありますが、 Restlet Wikiで説明されているように、他の構成を取得できます。

于 2010-09-02T21:14:39.420 に答える
0

プログラムによる構成

Engine.setRestletLogLevel(Level.OFF);

詳細 : http://restlet.com/learn/guide/2.2/editions/jse/logging

バージョン 2.1 以降、Engine#setLogLevel(…) および setRestletLogLevel(…) 静的メソッドを使用してプログラムでログ レベルを変更できるようになりました。Request#loggable プロパティを設定するか、LogService#isLoggable(Request) メソッドをオーバーライドすることで、選択的な呼び出しログを有効にすることもできます。

于 2014-08-25T13:59:44.543 に答える
0

ここに何か問題があるようです: org.restlet.ext.slf4j.jar、slf4j-api.jar、logback-core.jar、および logback-classic.jar がリンクされている場合は、ログを無効にするために必要なものがすべて揃っています。 sdout と stderr。それらに追加しないように、構成ファイル (logback.xml) を変更するだけです。

この構成では、restlet は slf4j を「ネイティブに」使用しており、通常の slf4j 構成が適用されます。

また、org.restlet.ext.slf4j.jar により、とにかくパフォーマンスに深刻な影響を与える jul-to-slf4j.jar が不要になります。

于 2012-02-21T20:22:20.863 に答える