2012-01-25 14 views
5

यहाँ मेरी log4j.properties फ़ाइलlog4j - एक ही संदेश लॉग में दो बार से बचें

# Set loggers' levels 
log4j.rootLogger=warn, trace_file 

# Appender 
log4j.appender.trace_file=org.apache.log4j.RollingFileAppender 
log4j.appender.trace_file.Append=true 
log4j.appender.trace_file.File=log/myLog.log 
log4j.appender.trace_file.MaxFileSize=10MB 
log4j.appender.trace_file.MaxBackupIndex=50 

# PatternLayout 
log4j.appender.trace_file.layout=org.apache.log4j.PatternLayout 
log4j.appender.trace_file.layout.ConversionPattern=%d [%p] (%F:%L) %m%n 

# Classes 
log4j.logger.my_package=info, trace_file 

है तो मुझे क्या करना चाहते हैं: my.package से

  • स्टोर लॉग अनुरोध trace_file में कम से कम INFO स्तर
  • स्टोर के साथ trace_file में अन्य सभी लॉगर्स से लॉग अनुरोध केवल तभी कम से कम WARN स्तर

मेरा कॉन्फ़िगरेशन काम नहीं करता है। यदि my.package स्तर WARN का एक लॉग अनुरोध उठाता है, तो यह लॉग अनुरोध दो बार लिखा जाता है। अगर मैं दो अलग परिशिष्टों का उपयोग करता हूं, तो कोई समस्या नहीं है।

मुझे क्या याद आ रही है?

उत्तर

6

my_package लॉगर कथन से "trace_file" निर्देश को हटाने का प्रयास करें। यह करने के लिए

4

बदलें

log4j.logger.my_package=info, trace_file 

को

log4j.logger.my_package=info 

Appenders दोनों जड़ लकड़हारा और my_package के लिए trace_file निर्दिष्ट करके, डिफ़ॉल्ट रूप से माता पिता लकड़हारा से लिए गए हैं हां, तो आप यह कह रहे हैं दो बार।

1

आप rootLogger की भूमिका खो रहे हैं।

my_package से एक चेतावनी है, और फिर log4j.logger.my_package=info, trace_file

मुझे लगता है कि जब आप एक दूसरे appender बनाया, आप इसे करने के लिए निर्दिष्ट नहीं किया है के माध्यम से एक ही appender द्वारा जड़ logguer log4j.rootLogger=warn, trace_file के माध्यम से trace_file द्वारा पकड़ा हो सकेगा rootLogger, क्या तुमने?

वैकल्पिक रूप से, आप केवल स्तर जड़ से विरासत में मिली बदल सकते हैं और एक ही appender रखने

log4j.logger.my_package=info 
1

रोकें appender-additivity के माध्यम से कर सकते हैं:

log4j.additivity.my_package = false

देखें http://logging.apache.org/log4j/1.2/manual.html , खंड "परिशिष्ट और लेआउट" ..

उद्धरण:

एपेंडर Additivity लॉगर सी के लॉग स्टेटमेंट का आउटपुट सी और उसके पूर्वजों के सभी परिशिष्टों पर जाएगा। यह "एपेंडर योजकता" शब्द का अर्थ है।

हालांकि, अगर लकड़हारा सी के एक पूर्वज, पी कहते हैं, additivity ध्वज गलत पर सेट है, तो सी उत्पादन सी ​​में सभी appenders और तक अपने पूर्वजों और पी सहित, लेकिन नहीं appenders में लिए निर्देशित किया जाएगा पी के पूर्वजों में से कोई भी

संग्रह करने वालों को अपने additivity ध्वज डिफ़ॉल्ट रूप से सही पर सेट किया है।

1

यह एक additivity समस्या की तरह दिखता है।

मैं संपत्ति फ़ाइल विन्यास से परिचित नहीं हूँ, लेकिन वहाँ एक additivity झंडा विकल्प होना चाहिए जब आप एक लकड़हारा परिभाषित करते हैं। इसे false पर सेट करना समस्या को हल करना चाहिए। इसके अलावा, xml कॉन्फ़िगरेशन का उपयोग करके आप log4j के Filter विकल्प का लाभ उठा सकते हैं जो कि संपत्ति फ़ाइल में उपलब्ध नहीं है। log4j.logger.my_package.additivity = false

अंत में, logback पर एक नज़र डालें यदि आप

4

मैं गेवॉर्ग से सहमत होने से पहले इसके बारे में कभी नहीं सुना:

वह कुछ इस तरह होना चाहिए। यह एक additivity मुद्दा हो सकता है।

जो log4j.properties फ़ाइल का उपयोग कर रहे उन:

log4j.additivity.com.example.package=false जोड़ें (जो भी पैकेज की जरूरत के साथ org.hibernate की जगह)

जो log4j.xml आधारित config का उपयोग कर रहे उन:।

<logger name="com.example.package" additivity="false"> 
.... 
</logger> 
संबंधित मुद्दे