2017-07-19 17 views
7

मैं एक कान log4j2.xml logPathlog4j2 लॉगिंग गलत पथ में हो रहा

<Property name="logPath">some_path_1<Property> 

के रूप में स्थापित है और एक लकड़हारा इस कान/lib वहाँ अंदर

<Logger name="a.b.c.d" level="INFO" /> 

के रूप में परिभाषित साथ weblogic में तैनात है है एक जार एक log4j2.xml और logPath संपत्ति युक्त

<Property name="logPath">some_path_2<Property> 

के रूप में एक बहुत ही simil के साथ एक लकड़हारा परिभाषित किया गया है आर पैकेजिंग संरचना

<Logger name="a.b.c" level="INFO" /> 

दोनों log4j2.xml के पास एक अलग लॉग फ़ाइल नाम भी कॉन्फ़िगर किया गया है। लेकिन दोनों के लिए लॉग कुछ_पैथ_2 पथ में आ रहे हैं और उस जार

परिभाषित करने के लिए लॉगिंग आउटपुट दोनों अलग-अलग होते हैं?

मेरे कान संरचना

ear 
|--lib 
|--|--abc.jar 
|--|--|--log4j2.xml //the one thats getting loaded 
|--xyz.war 
|--|--WEB-INF 
|--|--|--classes 
|--|--|--|--log4j2.xml // the one I want 

Edit1 की तरह है: मैं युक्त युद्ध के web.xml में निम्नलिखित जोड़ा है, लेकिन यह मदद नहीं की

<context-param> 
     <param-name>log4jConfigLocation</param-name> 
     <param-value>/WEB-INF/classes/log4j2.xml</param-value> 
    </context-param> 

EDIT2: मैं भी इस की कोशिश की और पाया गया कि इस विन्यास का उपयोग करके केवल एक बार रुक-रुक कर

ear 
|--lib 
|--|--abc.jar 
|--|--|--log4j2.xml //the one thats getting loaded 
|--|--xyz.jar 
|--|--|--log4j2.xml //the one I want.. works but not always.Does classloader loads the jars alphabetically? 
|--xyz.war 
|--|--WEB-INF 
|--|--|--classes 
|--|--|--|--log4j2.xml // the one I want 
+2

मुझे लगता है कि आप log4j2 मॉड्यूल को classpath में log4j2 कॉन्फ़िगरेशन फ़ाइल खोजने के लिए दे रहे हैं। तो, जो भी जार पर आधारित है, निर्देशिका पहले लोड हो जाती है कॉन्फ़िगरेशन फ़ाइल लोड हो जाती है। संभावित रूप से, आप एक तर्क के रूप में '-Dlog4j.configurationFile = path/to/log4j2.xml' कर सकते हैं। यदि यह संभव नहीं है, प्रोग्रामेटिक रूप से log4j को किसी विशिष्ट पथ में ढूंढने दें। – Andrews

+0

"यह सुनिश्चित करने के लिए कि लॉगिंग आउटपुट दोनों परिभाषित के रूप में अलग-अलग होते हैं?" एकाधिक विन्यास फाइलों के लिए कोई समर्थन नहीं है। आपको कॉन्फ़िगरेशन मैन्युअल रूप से मर्ज करना होगा, फिर आपको या तो एंड्रॉइड के रूप में संपत्ति के साथ उपयोग करने के लिए log4j2.xml निर्दिष्ट करना होगा या आपको यह सुनिश्चित करना होगा कि क्लासपाथ में केवल एक log4j2.xml है। – alan7678

उत्तर

2

log4j आरंभ नहीं हो जाता काम कर रहा है फ़ाइल जो पहली बार log4j बूटस्ट्रैपर द्वारा पाई जाती है। अन्य सभी (संभावित उपस्थित) कॉन्फ़िगरेशन फ़ाइलों को ध्यान में नहीं रखा जाएगा। उचित ट्यूटोरियल में log4j ऑटो कॉन्फ़िगरेशन की प्राथमिकताओं पर और जानें।

-1

क्या आप वाकई log4j द्वारा उपयोग करने के लिए "log4.xml" फ़ाइल का उपयोग करना चाहते हैं। मुझे नहीं लगता, log4j2 स्वचालित विन्यास तंत्र नाम "logj.xml" नाम से विन्यास फाइल को खोजने का प्रयास करें।

official documentation से,

log4j स्वचालित रूप से आरंभीकरण के दौरान ही कॉन्फ़िगर करने की क्षमता है। जब Log4j शुरू होता है तो यह सभी कॉन्फ़िगरेशन फैक्ट्री प्लगइन का पता लगाएगा और उन्हें से सबसे कम से कम भारित क्रम में व्यवस्थित करेगा। डिलीवर के रूप में, लॉग 4j में चार कॉन्फ़िगरेशन फैक्ट्री कार्यान्वयन शामिल हैं: जेएसओएन के लिए एक, वाईएएमएल के लिए एक, गुणों के लिए एक और एक्सएमएल के लिए एक।

log4j "log4j.configurationFile" प्रणाली संपत्ति निरीक्षण करेंगे और, अगर सेट, ConfigurationFactory कि फ़ाइल एक्सटेंशन से मिलान का उपयोग कर विन्यास लोड करने के लिए प्रयास करेंगे।

कोई व्यवस्था संपत्ति गुण ConfigurationFactory classpath में log4j2.properties या log4j2.json या log4j2.xml फ़ाइलों के लिए दिखेगा सेट है, तो।

संभवतः आपको "xyz.war // WEB-INF/classes/log4j.xml" फ़ाइल को "xyz.war // WEB-INF/classes/log4j2.xml" नाम बदलने का प्रयास करना चाहिए।स्पष्ट रूप से इस फ़ाइल की सामग्री लॉग 4j कॉन्फ़िगरेशन xsd की पुष्टि करनी चाहिए।

+1

प्रश्न पहली पंक्ति में log4j.xml के बजाय log4j2.xml का उपयोग स्पष्ट रूप से उल्लेख करता है। – rajesh

+0

उत्तर मूल प्रश्न में दिए गए कान संरचना के आधार पर बनाया गया था। आपने कान संरचना में फ़ाइल नाम को सही करने के लिए संपादन किए हैं। वैसे भी मैं आपके प्रश्न का उत्तर संपादित करूंगा। – skadya

2

जैसा कि आप संभावित रूप से पहले से ही जानते हैं कि आपकी समस्या यह है कि केवल एक कॉन्फ़िगरेशन-फ़ाइल लोड हो जाती है और कौन सा क्लासलोडर पर निर्भर करता है। तो आपको उस पर भरोसा नहीं करना चाहिए।

आपकी समस्या के लिए केवल दो संभावित आत्माएं हैं, लेकिन आज मेरे पास आपके लिए काम करने का समय नहीं है - क्षमा करें। आप से abc.jar चींटी/MAVEN/Gradle में अपने निर्माण स्क्रिप्ट या जो कुछ भी साथ कर abc.jar

  1. निकालें log4j2.xml में हटाने या config-फ़ाइल का नाम बदलने के लिए है। अपनी कॉन्फ़िगर-फ़ाइल में कॉन्फ़िगर-फ़ाइल के interessting भागों को कॉपी-पेस्ट करें।

  2. abc.jar के अंदर log4j2.xml का नाम बदलें एएनटी/मेवेन/ग्रेडल या जो कुछ भी में अपनी बिल्ड-स्क्रिप्ट के साथ करें। अब आप अपनी log4j2.xml में पूरी कॉन्फ़िगरेशन फ़ाइल शामिल कर सकते हैं। इसे CompositeConfiguration कहा जाता है।

मुझे आशा है कि यह छोटी सलाह आपकी मदद करेगी। शुभकामनाएँ!

2

क्या आप एक्सआर को जार/युद्ध से हटा सकते हैं और कान स्तर पर केवल एक एक्सएमएल फ़ाइल का उपयोग कर सकते हैं जिसमें लॉगिंग पथ/गुण दोनों का विवरण है। आप reconfigure log4j2 in code with a specific configuration file पर आज़मा सकते हैं।

आप dynamically write to separate log files भी कर सकते हैं, लेकिन मैंने व्यक्तिगत रूप से यह कोशिश नहीं की है इसलिए मैं इस पर और अधिक मार्गदर्शन नहीं कर पाऊंगा।

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