9

アイデアは、再デプロイせずにログバック構成を変更できるようにすることです。プロジェクトでは Slf4j と logback を使用しています。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 が変更されたかどうか (およびファイルが常に同じかどうか) をスキャンがチェックすることです。そのため、プロパティ ファイルの値を変更しても logback の構成は変更されません。変更は、再デプロイ後にのみ適用されます。

では、再デプロイせずにログバック構成を変更できるようにするための最良の方法は何ですか? それを実現できるメカニズムはありますか?

upd: 変更はめったに行われません。しかし、それらはできるだけ早く適用する必要があります。パフォーマンスも重要です。

4

3 に答える 3

6

私はこれを行うことでそれをリロードすることができます:

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

私のユースケースでは、次のようにして、いくつかのプロパティをコンテキストに追加します。

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

autoConfig の前。

プロパティ ファイルからのプロパティの読み取りも機能するはずです。

于 2012-10-31T14:58:43.933 に答える
3

おそらく、コマンド「touch」は、プロパティを設定した後の架空のファイル変更に役立ちます。

于 2012-10-31T15:00:17.427 に答える
0

After some comparing I think it would be easier and more comfortable to place logback.xml out of ear. It can be realized by specifying system property logback.configurationFile in server configuration. To make editing more convenient for people I plan to define some properties in the beginning of the file. Like that

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

And then use them in configuration

<pattern>${consolePattern}</pattern>

It will handle problem with dynamic changes and it is almost userfriendly ))

于 2012-11-01T13:52:22.583 に答える