log4j: एक विशिष्ट परिशिष्ट के लिए एक विशिष्ट वर्ग का लॉग आउटपुट


161

मैं log4j का उपयोग करता हूं और कुछ लॉगर्स के आउटपुट को विशिष्ट फाइलों में रूट करना चाहूंगा।

मेरे पास पहले से ही कई एपेंडर्स हैं। अब, डिबगिंग को आसान बनाने के लिए, मैं log4j को बताना चाहता हूं कि एक विशिष्ट वर्ग (जैसे foo.bar.Baz) द्वारा उत्पन्न आउटपुट को एक विशिष्ट लॉग फ़ाइल में लिखा जाना चाहिए।

क्या यह किया जा सकता है?

जवाबों:


203

एक उदाहरण:

log4j.rootLogger=ERROR, logfile

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.datePattern='-'dd'.log'
log4j.appender.logfile.File=log/radius-prod.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

log4j.logger.foo.bar.Baz=DEBUG, myappender
log4j.additivity.foo.bar.Baz=false

log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myappender.datePattern='-'dd'.log'
log4j.appender.myappender.File=log/access-ext-dmz-prod.log
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout
log4j.appender.myappender.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

21
आह - वह सरल! धन्यवाद! क्या log4j.additivity.foo.bar.Baz = झूठी सेटिंग इस बात को लागू करती है कि Baz का आउटपुट rootLogger के परिशिष्ट में दिखाई नहीं देगा?
गुब्रुतज़

3
log4J के किस संस्करण के लिए यह है? मैं log4j संस्करण 1.2.17 के लिए एक ही काम करने के लिए xml विन्यास खोजने की कोशिश कर रहा हूँ
AC

1
@ रोड्रोडोर्गेल हाँ, वहाँ कुछ भी असामान्य नहीं है
मौरिस पेरी

4
@dwjohnston झूठी के लिए एडिटिविटी सेट करने से लकड़हारे को उसके पूर्वजों के एपेंडरों के लिए लॉग इन करने से रोक देगा (यह डिफ़ॉल्ट रूप से सत्य है), इस मामले में, एडजस्टिविटी को सही छोड़ दिया गया था, Baz एपेंडर करने के लिए लॉगिंग दोनों फाइलों को लिखा होगा।
मौरिस पेरी

1
Xml विन्यास पर कोई विचार?
इगोर डोनिन

21

यहाँ XML कॉन्फ़िगरेशन के बारे में एक उत्तर दिया गया है, ध्यान दें कि यदि आप फ़ाइल परिशिष्ट को नहीं देते हैं तो ConversionPatternयह 0 बाइट फ़ाइल बनाएगा और कुछ भी नहीं लिखेगा:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <appender name="bdfile" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="false"/>
        <param name="maxFileSize" value="1GB"/>
        <param name="maxBackupIndex" value="2"/>
        <param name="file" value="/tmp/bd.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <logger name="com.example.mypackage" additivity="false">
        <level value="debug"/>
        <appender-ref ref="bdfile"/>
    </logger>

    <root>
        <priority value="info"/>
        <appender-ref ref="bdfile"/>
        <appender-ref ref="console"/>
    </root>

</log4j:configuration>

2
इसे हटाने के लिए महत्वपूर्ण है <appender-ref ref="bdfile"/>से <root>अन्यथा आप अपने पूरे लॉग के साथ-साथ इस फाइल को कॉपी किया देखेंगे -।
साब

कैसे डिफ़ॉल्ट pacakge के लिए या बिना पैकेज के विशिष्ट वर्ग के लिए इसे कॉन्फ़िगर करें?
प्रसाद जाधव

यह <logger>...तत्व है। नाम और परिशिष्ट के रूप में फ़ाइल परिशिष्ट के रूप में वर्ग या पैकेज निर्दिष्ट करें।
मकीब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.