2014-05-14 7 views
17

क्या कोई तरीका है कि हम लॉगबैक कॉन्फ़िगरेशन को ओवरराइड कर सकते हैं? मुझे पता है कि हम logback.xml नामक फ़ाइल में लॉगबैक कॉन्फ़िगरेशन को परिभाषित करते हैं (आमतौर पर पथ स्रोत/संसाधनों में संग्रहीत) और मुझे पता है कि <include> टैग का उपयोग करके हम लॉगबैक.एक्सएमएल में अतिरिक्त फ़ाइल को नीचे की तरह जोड़ सकते हैं:लॉगबैक कॉन्फ़िगरेशन ओवरराइडिंग

<configuration> 

<!--<include url="file:///d:/ServerConfig.xml"/>--> 
<include file="${outPut}/ServerConfig.xml"/> 


<logger name="Server" LEVEL="DEBUG"> 
    <appender-ref ref="FILEOUT" /> 
</logger> 

<root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
    <!--<appender-ref ref="FILEOUT" />--> 
</root> 

</configuration> 

लेकिन क्या होगा अगर मैं

तरह से यहां से (उदाहरण स्थापित जड़ लकड़हारा, जानकारी के लिए स्तर के लिए) इस डिफ़ॉल्ट कॉन्फ़िगरेशन ओवरराइड करना चाहते शामिल फ़ाइल है:

<included> 

<!-- <property file="d:/ServerSysVar.properties"/>--> 
<property file="${outPut}/ServerSysVar.properties"/> 


<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are assigned the type 
     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
    <encoder> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
    </encoder> 
</appender> 



<appender name="FILEOUT" class="ch.qos.logback.core.FileAppender"> 
    <file>${Sys_Location}/Serverfile4.log</file> 
    <!-- encoders are assigned the type 
     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
    <encoder> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %class{36}.%M %L CLIENT_PORT:%X{ClientPort}- %msg%n</pattern> 
    </encoder> 
</appender> 


<logger name="Service" LEVEL="DEBUG"> 
    <appender-ref ref="FILEOUT" /> 
</logger> 

<root> 
    <appender-ref ref="STDOUT" /> 
    <!-- <appender-ref ref="FILEOUT" />--> 
</root> 

</included> 
+0

में कहा गया है एक बग 2011 में खबर दी है कि सिस्टम गुण के साथ विन्यास अधिभावी द्वारा इस मुद्दे को हल करने का इरादा रखता है - http://jira.qos.ch/browse/LOGBACK- 23 9 – erkfel

+1

यह चर्चा कुछ * अकादमिक * बकवास के लिए कुछ भी बदलने के लिए विरोध करने वाले लेखक की उल्लेखनीय जिद्दीपन दिखाती है। मुझे आश्चर्य है कि यह कार्यान्वयन अभी भी जिंदा कैसे हो सकता है? – tomasb

उत्तर

17

मैं डॉन ऐसा नहीं लगता कि आपको ओवरराइट कर सकते हैं- एक फ़ाइल से परिभाषाएं।

logback.xml

<configuration> 
    <include file="includedFile.xml" /> 

    <!-- STDOUT appender stuff --> 

    <root level="${root.level:-DEBUG}"> 
    <appender-ref ref="STDOUT" /> 
    </root> 
<configuration> 

includedFile.xml

<included> 

    <!-- override the default value; or comment out to leave it at default --> 
    <property name="root.level" value="INFO" /> 

</included> 
:

लेकिन मैं एक दृष्टिकोण है कि आपके सवाल का मूलभूत मूल्यों के साथ variable substitution का उपयोग कर जड़-लकड़हारा स्तरीय अधिभावी के बारे में, हल करती है

उस अवधारणा के साथ, मैं भी शामिल फ़ाइल से एकाधिक एपेंडर्स को आउटपुट नियंत्रित करने में सक्षम हूं:

logback.xml

<configuration> 
    <include file="includedFile.xml" /> 

    <!-- STDOUT appender stuff --> 

    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
     <level>${file.level:-ALL}</level> 
    </filter> 
    <file>/path/to/logfeil.log</file> 
    <encoder> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
    </encoder> 
    </appender> 

    <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
     <level>${syslog.level:-OFF}</level> 
    </filter> 
    <syslogHost>localhost</syslogHost> 
    <facility>${syslog.facility:-LOCAL1}</facility> 
    <suffixPattern>${syslog.pattern:-[%thread] %logger{36} - %msg}</suffixPattern> 
    </appender> 

    <logger name="my.package" level="${logging.level:-INFO}" additivity="false"> 
    <appender-ref ref="FILE" /> 
    <appender-ref ref="SYSLOG" /> 
    </logger> 

    <root level="${root.level:-DEBUG}"> 
    <appender-ref ref="STDOUT" /> 
    </root> 
<configuration> 

और includedFile.xml में मैं नियंत्रित कर सकते हैं, और क्या स्तर संदेश appenders FILE और SYSLOG के माध्यम से पारित करेगा, गुण file.level, syslog.level और पाठ्यक्रम logging.level की स्थापना के पर।

2

मुझे ऐसी ही समस्या थी जिस पर यह उत्तर सबसे अच्छा तरीका प्रतीत होता है।

मेरे मामले में, मुझे शामिल फाइल को ओवरराइड करने की आवश्यकता है ताकि पूरी तरह से परिशिष्टों को बंद कर दिया जा सके।

लॉग स्तर मान के लिए एक चर का उपयोग करके, कोई इसे बंद कर सकता है।

<included> 
    (...) 
    <root level="${root.level.console:-DEBUG}"> 
    <appender-ref ref="CONSOLE" /> 
    </root> 
    <root level="${root.level.file:-DEBUG}"> 
    <appender-ref ref="FILE" /> 
    </root> 
</included> 

रूप http://logback.qos.ch/manual/configuration.html#rootElement

<configuration> 
    <include resource="base.xml" /> 
    (...) 
    <property name="root.level.console" value="OFF" /> 
</configuration> 
+0

यह संस्करण मेरे लिए काम नहीं करता है। मैं लॉगबैक संस्करण 1.1.3 का उपयोग करता हूं। आपने किस संस्करण का उपयोग किया? कम से कम यह एपेंडर के फ़ाइल टैग के लिए काम नहीं करता है। मैंने फ़ाइल फ़ाइल – Geniy

+0

से फ़ाइल नाम को ओवरराइड करने का प्रयास किया _ _ _ <संसाधन = "base.xml" /> _ से पहले सेट करना महत्वपूर्ण है। – Geniy

+0

प्रलेखन "सबसे अधिक तत्व" पर कहता है, इसलिए यदि यह काम करता है तो शायद यह उनके हिस्से पर जानबूझकर नहीं है।ऐसा लगता है कि आपकी शामिल फ़ाइल के अंदर तत्व डालना बेहतर होगा। – Shannon

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