2013-01-11 9 views
5

Mam konsolę administracyjną, którą buduję, i chcę wyświetlić dzienniki utworzone w Logback dla mojej aplikacji. Jednak, jeśli te dzienniki są przechowywane, różni się w zależności od środowiska. Mam kilka plików własności, które określają, gdzie przechowywane są dzienniki:Właściwości dostępu zdefiniowane programowo 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> 

Chciałbym znaleźć wartość ${log.dir} z Logback's Java API. Próbowałem następujące, ale nie ma żadnej z właściwości zdefiniowanych w zasobach. Na przykład:

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

Moje pytanie brzmi: z jakiego interfejsu API powinienem korzystać?

Odpowiedz

7

Domyślnie właściwości są zdefiniowane w "lokalnym" scope. Można jednak wymusić własność mieć zakres kontekstowe, w którym to przypadku jest to dość proste, aby uzyskać wartość właściwości:

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

Definiowanie właściwości w „kontekst” zakres jest uważany trochę ciężkie rękami. Zamiast definiować wszystkie/wiele właściwości w zakresie kontekstu, można zdefiniować tylko jedną właściwość w zasięgu kontekstu. Oto przykład:

<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> 

Można wówczas uzyskać wartość szukasz z:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
String val = lc.getProperty("log.dir.ctx"); 
Powiązane problemy