2012-10-31 8 views
9

アイデアは、再デプロイメントなしでログバック設定を変更できるようにすることです。 プロジェクトでSlf4jとログバックが使用されています。 logback.xmlファイルは耳に入っていますが、耳の外に置かれたプロパティファイルからいくつかのプロパティを読み込みます。そのような 何か:再デプロイメントなしでログバック設定を更新する

<configuration scan="true" scanPeriod="5 seconds"> 
<property file="${logconfig}"/> 

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder> 
     <pattern>${logback.consolePattern}</pattern> 
    </encoder> 
</appender> 
<root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
</root> 

</configuration> 

問題は、スキャンチェックがlogback.xmlが変更(と常に同じファイル)された場合のことです。そのため、プロパティファイルの値を変更しても、ログバックの設定は変更されません。変更は再デプロイ後にのみ適用されます。

再配置なしでログバック設定を変更するにはどうすればよいですか?それを実現するためのメカニズムがありますか?

更新:ほとんど変更が行われません。できるだけ早く適用する必要があります。パフォーマンスも重要です。私は、このことによって、それをリロードするために管理

+1

ようにあなたは、プログラムにいくつかのダミーの変更を行うことができませんでしたlogback.xmlファイルが再ロードされるようにしますか?ファイルの最後に空白行を追加したり削除したりするのと同じですか? – rolve

+0

@私はそのような作業について考えました。しかし、私はそれを行うより便利な方法が必要であることを願っています。 – error1009

答えて

0

いくつか比較した後、logback.xmlを耳から離す方が簡単で快適になると思います。 システム構成のlogback.configurationFileをサーバー構成で指定することで実現できます。 編集をより便利にするために、ファイルの先頭にいくつかのプロパティを定義する予定です。その

<property name="consolePattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/> 

と)それは、動的な変更に問題を処理すると、それはほとんどユーザーフレンドリーである構成で

<pattern>${consolePattern}</pattern> 

をそれらを使用)

5

loggerContext.putProperty("logDirectory", getLogDirectory().getAbsolutePath()); 

を自動構成する前に:私の使用例では

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); 
loggerContext.reset(); 
ContextInitializer ci = new ContextInitializer(loggerContext); 
ci.autoConfig(); 

を、私は実行してコンテキストにいくつかのプロパティを追加するためにそれを行います。

プロパティファイルからプロパティを読み取ることも有効です。

+0

悲しいことに、LoggerContextはログバッククラスなので、アプリケーションコードではインターフェイスではなく、ログの実装を認識する必要があります。これはもちろん、ポスターがslf4jをロギングファサードとして使用することを前提としています。 –

+0

プロパティファイルの変更を確認することを提案します。プロパティーが変更された場合はリロード構成? それはうまくいくはずですが、性能に関してはあまり良くないと思います。 – error1009

3

"touch"コマンドは、プロパティ設定後に架空のファイルを変更する場合に便利でしょう。

関連する問題