2013-01-11 16 views
5

ビルド中の管理コンソールがあり、私のアプリケーションにLogbackで作成したログを表示したいとします。ただし、これらのログが保存される場所は環境ごとに異なります。アクセスプロパティプログラムでログバックで定義されています

<configuration> 
    <property resource='log.properties'/> 
    <property resource='log.${ENV:-prod}.properties'/> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${log.dir}/sync.log</file> 
    ... 
</configuration> 

私はLogback'sのJava APIから${log.dir}の値を見つけるしたいと思います:私は、ログが保存されている定義する複数のプロパティファイルを持っています。私は以下を試してみましたが、リソースに定義されているプロパティはありません。例:

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); 
String logDir = loggerContext.getProperty("log.dir"); // this always returns null 

私の質問はどのAPIを使用するのですか?

答えて

7

デフォルトでは、プロパティは「ローカル」scopeで定義されています。しかし、あなたはそれがプロパティの値を取得するには非常に簡単です、その場合には、コンテキストのスコープを持っている財産を強制することができます。

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
String val = lc.getProperty(aString); 

「文脈」スコープは少し重い利きと考えられている中でプロパティを定義します。コンテキストスコープですべて/多数のプロパティを定義する代わりに、コンテキストスコープ内に単一のプロパティのみを定義することができます。次に例を示します。

<configuration> 
    <!-- get many props from a file --> 
    <property resource='log.properties'/> 
    <-- set only one to be in context scope --> 
    <property scope="context" name="log.dir.ctx" value="${log.dir}" /> 
    ... 
</configuration> 

あなたは、あなたがして探している値を得ることができた:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
String val = lc.getProperty("log.dir.ctx"); 
関連する問題