2013-02-25 19 views
6

मैं एक logback विन्यास एक सीमा से फिल्टर के साथ एक appender है कि राशि के लिए एक लॉग स्तर remapping:logback एक विशिष्ट लकड़हारा

<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>INFO</level> 
    </filter> 
    ... 
</appender> 

यह सुनिश्चित करता है कि केवल जानकारी और उच्च (चेतावनी दी है, त्रुटि) syslog में लॉग इन करने के । हालांकि, हमारे द्वारा उपयोग की जाने वाली तीसरी पार्टी लाइब्रेरी में से एक DEBUG पर एक विशेष ईवेंट लॉगिंग कर रहा है, और मैं इस कार्यक्रम को syslog पर लॉग करना चाहता हूं। मेरे मन में पहला दृष्टिकोण था लॉगजर में लॉग स्तर को रीमेप करने का प्रयास करना, लेकिन यह सुनिश्चित नहीं है कि यह संभव है या नहीं? कुछ ऐसा:

<logger name="akka.some.Thing" level="DEBUG" logAs="INFO"> 
    <appender-ref ref="SYSLOG" /> 
</logger> 

जाहिर है, "logAs" पैरामीटर मौजूद नहीं है, इसलिए मैं ऐसा नहीं कर सकता। Akka.some लॉगिंग करने का सबसे अच्छा तरीका क्या होगा। अन्य लॉगर्स के लिए फ़िल्टर को छोड़ते समय SYSLOG एपेंडर को लेकर?

दूसरा दृष्टिकोण एक दूसरा एपेंडर बनाना होगा जिसे SYSLOG2 कहा जाता है जिसमें फ़िल्टर नहीं होता है और इसका उपयोग करने के लिए विशिष्ट लॉगर सेट किया जाता है, लेकिन यह सोच रहा था कि केवल 1 SYSLOG एपेंडर के साथ लॉगबैक कॉन्फ़िगर करने का कोई तरीका है या नहीं ...

धन्यवाद,

+0

आपके पास थ्रेसहोल्ड फ़िल्टर क्यों है? क्या आपके अन्य "लॉगर" कॉन्फ़िगरेशन इस ऐपेंडर को INFO से अधिक स्तर भेज रहे हैं? यदि हां, तो क्यों? –

+0

हां, हम 2 स्थानों पर लॉग इन करते हैं। syslog एपेंडर लाइसेंसिंग स्थिरांक वाले इंडेक्सर में समाप्त होता है, इसलिए हम कभी भी INFO से कम कुछ भी लॉग नहीं करना चाहते हैं। हालांकि जब हम डीबग करना चाहते हैं तो हम डिबगिंग सक्षम करते हैं और यह फ़ाइल एपेंडर (सिसॉग में सभी डीबग गंक के बिना) पर जाता है। – Brett

+1

दिलचस्प। यदि आपका पर्यावरण अनुमति देता है, तो सबसे आसान आपके छोटे फ़िल्टर को लिखना होगा जो कुछ भी लाइसेंस दे रहा था। अन्यथा, अधिक जटिल फ़िल्टर में से एक - जो अभिव्यक्तियों की अनुमति देता है - काम कर सकता है, लेकिन दूसरा एपेंडर शायद समझने और बनाए रखने में आसान होगा। –

उत्तर

6

मुझे पता है कि यह एक पुराना सवाल है - लेकिन वास्तव में यह करना संभव है कि ओपी एक SyslogAppender के साथ क्या करना चाहता है।

यदि अन्य लोग रीमेप करने का उदाहरण खोज रहे हैं तो आप org.springframework.boot.logging.logback.LevelRemappingAppender कक्षा पर एक नज़र डाल सकते हैं। उस ऐपेंडर के साथ यह दोनों संभव है कि लॉग इवेंट के लिए अंततः किस एपेंडर का उपयोग किया जाए, और अंतिम लॉग इवेंट के लिए उपयोग किए जाने वाले स्तर को रीमेप करना भी संभव है - उदा। एक डीएनयूयूजी स्तर को एक आईएनएफओ स्तर में बदलकर। logback कॉन्फ़िग फ़ाइल में

प्रयोग उदाहरण (https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml से लिया गया):

<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender"> 
    <!-- Optional: specify the destination logger the event ends up in --> 
    <destinationLogger>org.springframework.boot</destinationLogger> 
    <!-- Optional: specify log level remapping --> 
    <remapLevels>INFO->DEBUG,ERROR->WARN</remapLevels> 
</appender> 

<logger name="org.thymeleaf" additivity="false"> 
    <appender-ref ref="DEBUG_LEVEL_REMAPPER"/> 
</logger> 

ध्यान दें कि एक विशिष्ट गंतव्य लकड़हारा करने के लिए remapping यह मुश्किल मूल लॉग घटना के स्रोत कोड को खोजने के लिए कर सकते हैं - तो साथ उपयोग देखभाल।

3

आप क्या कर सकते, एक ही उत्पादन के साथ एक दूसरे लकड़हारा + appender लिख रहा है:

<appender name="SYSLOG-2" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>DEBUG</level> 
    </filter> 
    ... 
</appender> 

<logger name="akka.some.Thing" level="DEBUG"> 
    <appender-ref ref="SYSLOG-2" /> 
</logger> 

यह वही उत्पादन के लिए अपने विशिष्ट डीबग कार्यों जोड़ देगा।

+0

हाँ - यह मेरा विचार था - "मेरी मूल पोस्ट के अनुसार दूसरा दृष्टिकोण" दूसरा ऐपेंडर बनाना होगा "- लेकिन यह सोच रहा था कि क्या केवल 1 एपेंडर के साथ लॉगबैक कॉन्फ़िगर करने का कोई तरीका है" गॉचा था। 1 एपेंडर के साथ करने का एकमात्र तरीका एक कस्टम एपेंडर लिखना है जो मुझे लगता है कि प्रति लॉगजर "रीमेप" प्रकार कॉन्फ़िगरेशन स्वीकार करता है। – Brett