2013-01-11 18 views
5

Ich habe eine Verwaltungskonsole, die ich erstelle, und ich möchte die Protokolle anzeigen, die in Logback für meine Anwendung erstellt wurden. Wo diese Protokolle jedoch gespeichert werden, ist je nach Umgebung unterschiedlich. Ich habe mehrere Eigenschaftsdateien, die definieren, in denen die Protokolle gespeichert werden:Zugriff auf in Logback programmierte Eigenschaften programmgesteuert

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

Ich mag würde den Wert von ${log.dir} von Logback's Java API zu finden. Ich habe Folgendes versucht, aber es hat keine der in den Ressourcen definierten Eigenschaften. Zum Beispiel:

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

So ist meine Frage, was API soll ich verwenden?

Antwort

7

Standardmäßig sind die Eigenschaften in "local" scope definiert. Sie können jedoch eine Eigenschaft erzwingen Kontext Umfang haben, in welchem ​​Fall es ziemlich einfach ist, den Wert der Immobilie zu erhalten:

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

Definieren von Eigenschaften in „Kontext“ Umfang ein wenig plump betrachtet wird. Anstatt alle/viele Eigenschaften im Kontextbereich zu definieren, können Sie nur eine einzelne Eigenschaft im Kontextbereich definieren. Hier ein Beispiel:

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

Sie könnten dann erhalten, um den Wert, den Sie suchen mit:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
String val = lc.getProperty("log.dir.ctx"); 
Verwandte Themen