मेरा एक प्रोजेक्ट ईएआर फ़ाइल के रूप में पैक किया जाता है जिसमें एसएलएफ 4 जे एपीआई (1.7.5) के साथ-साथ लॉगबैक लाइब्रेरी इसके कार्यान्वयन (logback-core 1.0.13
और logback-classic 1.0.13
) के रूप में पैक किया जाता है।SLF4J - बाइंडिंग्स को उसी एप्लिकेशन सर्वर पर अन्य अनुप्रयोगों द्वारा अधिलेखित किया जाता है
जब मैं (प्रोजेक्ट) अपनी परियोजना को तैनात करता हूं SLF4J के लॉगरफ़ैक्ट्री को संभावित बाध्यकारी के रूप में लॉगबैक मिल जाता है और सही लॉगर (यानी लॉगबैक) का उपयोग किया जाता है।
अब मेरे पास एक संसाधन कनेक्टर (activemq-rar-5.8.0.rar
) है जो मेरी अपनी ईएआर फ़ाइल से पहले तैनात है (क्योंकि ईएआर फाइलों को आरएआर की आवश्यकता होती है)। दुर्भाग्य से इस आरएआर में अपना स्वयं का एसएलएफ 4 जे कार्यान्वयन है (slf4j-api-1.6.6.jar
slf4j-log4j12-1.6.6.jar
log4j-1.2.17.jar
)। आरएआर फाइलें log4j कार्यान्वयन का उपयोग करती हैं।
जब मैं अपनी ईएआर फ़ाइल को तैनात करता हूं तो मेरे एप्लिकेशन के कोड के अंदर लॉगरफ़ैक्टरी अचानक लॉग 4j कार्यान्वयन (org.slf4j.impl.Log4jLoggerAdapter
) का उपयोग करता है - भले ही मुझे क्लासपाथ को आरएआर से अलग किया जाए।
यह मामला प्रतीत नहीं होता है - तो मैं गलत क्या कर रहा हूं (आरएआर लॉग 4j का उपयोग करना चाहिए, मेरे ईएआर को लॉगबैक का उपयोग करना चाहिए)?
अद्यतन 1: It doesn't look as if I am alone, लेकिन दुर्भाग्य से एक जवाब याद आ रही है ..
अद्यतन 2:
this तालिका के अनुसार, ग्लासफिश से पहले कनेक्टर मॉड्यूल को लोड करता है ईएआर/युद्ध libs (जो लोड करने के लिए अंतिम libs हैं)।
अद्यतन 3:
मैं "बाइंडिंग" ठीक करने में कामयाब रहे: यदि मैं slf4j-api-1.7.5.jar
और logback कार्यान्वयन (logback-core-1.0.13.jar
और logback-classic-1.0.13.jar
), logback उपयोग किया जाएगा डाल ग्लासफिश में domains/<myDomain>/lib
फ़ोल्डर के अंदर लॉगिंग कार्यान्वयन के रूप में (अपडेट 2 देखें - "सामान्य क्लासलोडर" "कनेक्टर क्लासलोडर" से पहले आता है)।
दुर्भाग्यवश मेरी कॉन्फ़िगरेशन फ़ाइलें अब WAR/EAR के अंदर नहीं हैं - जिसे बाद में एक अलग क्लासलोडर ("आर्काइव क्लासलोडर") द्वारा लोड किया जाएगा।
तो यह वास्तव में मेरे लिए एक समाधान नहीं है क्योंकि मैं लॉगबैक कॉन्फ़िगरेशन फ़ाइलों को ईएआर/डब्ल्यूएआर के अंदर रखना चाहता हूं (क्योंकि प्रत्येक एप्लिकेशन एक अलग कॉन्फ़िगरेशन का उपयोग करता है)।
तरह का संबंध
stupidSheep
पैकेज निर्भरता में log4j क्यों? कंटेनर लॉगिंग कॉन्फ़िगरेशन की देखभाल नहीं कर सकता है और इम्प्लायर प्रदान कर सकता है? – roby
मैं लॉग 4j को अपने आप पर निर्भरता के रूप में पैक नहीं करता हूं। यह अपाचे ActiveMQ (http://activemq.apache.org/maven/5.8.0/activemq-rar/dependencies.html) द्वारा सिद्ध आरएआर (संसाधन एडाप्टर) में है। ये जेएआर फाइल कुछ लॉग कॉन्फ़िगरेशन फ़ाइलों के साथ आरएआर के अंदर हैं। – stupidSheep