2013-01-11 10 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 जावा एपीआई से ${log.dir} का मूल्य प्राप्त करना चाहते हैं: मैं कई संपत्ति फ़ाइलों को परिभाषित जहां लॉग जमा हो जाती है है। मैंने निम्नलिखित की कोशिश की थी, लेकिन इसमें संसाधनों में परिभाषित गुणों में से कोई भी नहीं है। उदाहरण के लिए:

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

तो मेरा सवाल यह है कि मैं किस एपीआई का उपयोग कर रहा हूं?

उत्तर

7

डिफ़ॉल्ट रूप से, गुण "स्थानीय" scope में परिभाषित किए गए हैं। हालांकि, अगर आप संदर्भ गुंजाइश है करने के लिए एक संपत्ति मजबूर कर सकते हैं, जिस स्थिति में यह संपत्ति के मूल्य प्राप्त करने के लिए बहुत आसान है:

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

में "संदर्भ" गुंजाइश एक छोटे से भारी हाथ माना जाता है गुण को परिभाषित करना। संदर्भ दायरे में सभी/कई गुणों को परिभाषित करने के बजाय, आप संदर्भ क्षेत्र में केवल एक ही संपत्ति को परिभाषित कर सकते हैं।

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

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

फिर आप मूल्य आप के साथ देख रहे प्राप्त कर सकते हैं: यहाँ एक उदाहरण है

संबंधित मुद्दे