Restlet 2.0のログを無効にするにはどうすればよいですか?
-
02-10-2019 - |
質問
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(リクエスト)メソッドをオーバーライドすることにより、選択的な通話ログを有効にすることもできます。