2012-03-16 13 views
11

का उपयोग करने से वेबलॉगिक 12 सी को रोकें हम slf4j का उपयोग करके लॉगिंग मुखौटा के रूप में नया सिस्टेन बना रहे हैं। जब नव Weblogic 12C पर तैनाती, हम सांत्वना लॉग पर इस त्रुटि मिली:सिस्टम के slf4j बाध्यकारी

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/opt/Oracle/Middleware2/modules/org.slf4j.jdk14_1.6.1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [zip:/opt/Oracle/Middleware2/user_projects/domains/m3/servers/AdminServer/tmp/_WL_user/test/t030q4/war/WEB-INF/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class] 

googling के बाद, हमने पाया है कि यह सिर्फ एक चेतावनी है, slf4j बाँध पहले लकड़हारा, जो इस मामले में weblogic की प्रणाली लकड़हारा रूपरेखा है पाया जाएगा । क्या यह हमारी WAR फ़ाइल में फ्रेमवर्क लॉगिंग करने के लिए बाध्य करने का कोई तरीका है? < वेबलॉगिक.एक्सएमएलवेबलॉगिक.एक्सएमएल में

उत्तर

0

मुझे विश्वास नहीं है कि एसएलएफ 4 जे क्लासपाथ में स्वयं-खोज के आधार पर अपने संस्करण को मजबूर करने का एक तरीका प्रदान करता है।

इसलिए, यदि आपके पास वेबलॉगिक पर प्रशासनिक अधिकार हैं, तो सबसे सरल समाधान WebLogic स्थापना फ़ोल्डर पर फ़ाइल को अद्यतन करके WebLogic के SLF4J संस्करण को 1.6.4 में अपग्रेड करना है।

अन्यथा, आप, हालांकि मुझे शक है अगर पसंद करते हैं-वेब-inf वर्गों एक युद्ध में काम नहीं करता है यह काम करेंगे एक युद्ध के बजाय एक कान का निर्माण और सिफारिशों here पालन करने की कोशिश कर सकते हैं।

+0

एह, मेरा मतलब क्या है "सिस्टम लाइब्रेरी के लिए बाध्यकारी के बजाय मेरे द्वारा प्रदान की गई लाइब्रेरी लॉग इन करने के लिए slf4j बाइंडर लॉग इन करें"। यह slf4j के संस्करण से संबंधित नहीं है, क्योंकि 1.6.1 पर स्विच करने से यह त्रुटि होती है, और slf4j के दस्तावेज़ के अनुसार, जब slf4j को कई बाइंडेबल लॉगर मिला, तो यह पहले लॉगर से जुड़ा होगा, जो हमेशा सिस्टम का slf44 बाध्यकारी – dhchen

2

हमें यह समस्या भी थी और चूंकि हमें लॉग 4 जे का उपयोग करके लॉगिंग को कॉन्फ़िगर करना आवश्यक है, यह एक मुद्दा था। हालांकि, prefer-application-packages का उपयोग कर अब तक काम करने के लिए, यानी साथ निम्नलिखित कान के META-INF फ़ोल्डर में एक weblogic-application.xml फ़ाइल डाल लगता है:

<?xml version="1.0" encoding="UTF-8"?> 
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-application.xsd http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd" > 
    <prefer-application-packages> 
     <package-name>org.slf4j</package-name> 
    </prefer-application-packages> 
</weblogic-application> 

(ठीक निर्दिष्ट xmlns काफी पुराना पुराना है लेकिन यह काम करता है, तो आप इसे अपडेट कर सकते हैं यदि आप चाहते हैं, तो मैंने अभी अपना लिया और असंबंधित हिस्सों को हटा दिया)।

हमारे पास अभी भी उपरोक्त चेतावनी है लेकिन यह आवश्यकतानुसार लॉग 4 जे का उपयोग करता है। वास्तव में, यदि आप लॉग में the URL specified on the next line (प्रश्न में यहाँ छोड़े गए) को देखो, यह कहते हैं:

चेतावनी SLF4J द्वारा उत्सर्जित सिर्फ इतना है कि, एक चेतावनी है। एसएलएफ 4 जे अभी भी के साथ बाध्य होगा जो क्लास पथ पर पहली फ्रेमवर्क पाता है।

तो मैं यह अभी भी लोड हो रहा है org.slf4j.impl.StaticLoggerBinder है, जो हम वास्तव में हमारे कान में एक पसंद करते हैं करने के लिए कॉन्फ़िगर के लिए सामान्य वर्ग लोडिंग तंत्र का उपयोग करता है लगता है (अर्थात classpath पर यह पहली बार कर रहे हैं)।

फिर भी, चेतावनी बनी हुई है लेकिन यह काम करती है। चेतावनी को ठीक करना अच्छा होगा लेकिन वेबलोगिक के प्रदत्त पुस्तकालयों को बदलने के बिना शायद संभव नहीं है।

4

WAR फ़ाइल के लिए आपको prefer-application-packagesweblogic.xml में this और this पोस्टों में वर्णित करना चाहिए।

आपके मामले में ऐसा

<?xml version="1.0" encoding="UTF-8"?> 
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"> 
    <wls:container-descriptor> 
     <wls:prefer-application-packages> 
      <wls:package-name>org.slf4j</wls:package-name> 
     </wls:prefer-application-packages> 
    </wls:container-descriptor> 
</wls:weblogic-web-app> 
27

छानने वर्गों पर लेकिन संसाधनों पर नहीं किया जाना चाहिए कुछ हो जाएगा, क्योंकि SLF4J एक संसाधन के रूप और नहीं एक वर्ग के रूप StaticLoggerBinder.class के लिए लग रहा है।

इसे अपने वेबलॉगिक-एप्लिकेशन में शामिल करें।एक्सएमएल भी:

<wls:prefer-application-packages> 
    <wls:package-name>org.slf4j.*</wls:package-name> 
    <wls:package-name>org.apache.commons.*</wls:package-name> 
</wls:prefer-application-packages> 

<wls:prefer-application-resources> 
    <wls:resource-name>org/slf4j/impl/StaticLoggerBinder.class</wls:resource-name> 
</wls:prefer-application-resources> 

और आपके लॉगर सिस्टम क्लासलोडर के अंदर एक के बजाय उपयोग किया जाएगा।

+3

होता है org.apache। कॉमन्स। * एसएलएफ 4 जे काम करने के लिए आवश्यक प्रविष्टि? यदि हां, तो क्यों? –

+0

कुछ दिन देर से लेकिन: com.apache.commons.logging। * – HRgiger

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