質問

RestletのログをプロジェクトでSTDOUT/STDERRに無効にし、org.restlet.ext.slf4jが提供するSLF4Jファサードをすべてのすべてのレストレットログに転送したいだけです。これを行う簡単な方法はありますか?

役に立ちましたか?

解決

まず、slf4jを構成して、java.util.logging APIへのすべてのRestletの呼び出しをインターセプトし、代わりにSLF4J FacadeのAPIの呼び出しにマッピングする必要があります。あなたは単にこれを置くことによってこれを行います 7月からslf4j.jar @Brunoが指摘したように、クラスパスで。

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

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

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

編集2019年4月29日:@naftulikayと@StemPlerからのコメントを必ず確認してください。

他のヒント

これは、ログを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>

迷惑なレストレットロギングを無効にすることができました。

Component component = new Component();

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

...

私は使用する傾向があります 7月からSLF4J ブリッジですが、で説明されているように、他の構成を取得できます レストレットwiki.

ここで何かが間違っているように思われる:org.restlet.ext.slf4j.jar、slf4j-api.jar、logback-core.jar、およびlogback-classic.jarがリンクされている場合、ロギングを無効にする必要があるすべてを既に持っていますsdoutとstderr。 configファイル(logback.xml)を変更して、それらに追加しないように変更するだけです。

この構成では、RestletはSLF4J「Natively」を使用しており、通常のSLF4J構成が適用されます。

また、org.restlet.ext.slf4j.jarは、7月からSLF4j.jarの必要性を排除し、とにかく深刻なパフォーマンスヒットが発生します。

プログラム構成

Engine.setRestletLogLevel(Level.OFF);

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

バージョン2.1以来、エンジン#setLoglevel(…)およびSetrestletLoglevel(…)静的メソッドを使用して、ログレベルをプログラム的に変更できるようになりました。また、リクエスト#loggableプロパティを設定するか、LogService#ISLOGGGABLE(リクエスト)メソッドをオーバーライドすることにより、選択的な通話ログを有効にすることもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top