दिलचस्प पोस्ट
मैं अपने साइट के इनपुट बॉक्स को पीला से कैसे रोकूं? जब एफ का उपयोग करें: देखें और च: सबव्यू कैसे एक कंबोडिया के लिए एक सूची बाँध? (Winforms) जावा में सी # और पैकेज में नाम स्थान के बीच का अंतर अपाचे एचटीटीपी क्लाइंट अंतरिम त्रुटि: NoHttpResponseException आपने निम्नलिखित एसडीके घटकों के लाइसेंस समझौते को स्वीकार नहीं किया है JS.s ऑब्जेक्ट को jQuery.serialize () डेटा कन्वर्ट करने के लिए कैसे? IllegalStateException: खंड का कंटेनर आईडी परिवर्तित नहीं किया जा सकता आईओएस Geofence CLCircularRegion निगरानी locationManager: didExitRegion उम्मीद के रूप में काम करने के लिए नहीं लगता है Xcode: चेतावनी "गणना प्रकार UIDeviceOrientation से अंतर्निहित रूपांतरण" pylab / networkx; अद्यतन के बाद प्रदर्शित कोई नोड लेबल नहीं क्या एक आर संकलक मौजूद है? कैसे घटना वस्तु को तार करने के लिए? Whatsapp से सभी संदेश प्राप्त करें XML स्निपेट्स की तुलना करें?

कैसे एक गुण फ़ाइल के साथ log4j को कॉन्फ़िगर करें

मैं एक गुण फ़ाइल को लेने के लिए log4j कैसे प्राप्त करूं?

मैं एक जावा डेस्कटॉप ऐप लिख रहा हूं जो मैं log4j का उपयोग करना चाहता हूं। मेरे मुख्य पद्धति में यदि यह है:

PropertyConfigurator.configure("log4j.properties"); 

Log4j.properties फ़ाइल समान निर्देशिका में होती है जब मैं जार खोलता हूं।

फिर भी मुझे यह त्रुटि मिलती है:

log4j: त्रुटि विन्यास फाइल [log4j.properties] पढ़ा नहीं जा सका java.io.FileNotFoundException: log4j.properties (सिस्टम निर्दिष्ट फ़ाइल नहीं पा सकता है)

मैं क्या गलत कर रहा हूं?

Solutions Collecting From Web of "कैसे एक गुण फ़ाइल के साथ log4j को कॉन्फ़िगर करें"

मेरा मानना ​​है कि कॉन्फ़िगर पद्धति को एक पूर्ण पथ की उम्मीद है किसी भी तरह, आप पहले गुण ऑब्जेक्ट को लोड करने का भी प्रयास कर सकते हैं:

 Properties props = new Properties(); props.load(new FileInputStream("log4j.properties")); PropertyConfigurator.configure(props); 

यदि गुण फ़ाइल जार में है, तो आप ऐसा कुछ कर सकते हैं:

 Properties props = new Properties(); props.load(getClass().getResourceAsStream("/log4j.properties")); PropertyConfigurator.configure(props); 

ऊपर मान लिया गया है कि log4j.properties जार फ़ाइल के मूल फ़ोल्डर में है।

जब आप PropertyConfigurator.configure ( स्ट्रिंग कॉन्फ़िगरफ़ाइलनाम ) का उपयोग करते हैं, तो वे log4j लाइब्रेरी में निम्न ऑपरेशन होते हैं।

 Properties props = new Properties(); FileInputStream istream = null; try { istream = new FileInputStream(configFileName); props.load(istream); istream.close(); } catch (Exception e) { ... 

यह पढ़ने में विफल रहता है क्योंकि यह वर्तमान निर्देशिका से "Log4j.properties" के लिए दिखता है जहां अनुप्रयोग निष्पादित होता है।

जिस तरीके से यह संपत्ति फ़ाइल के पढ़ने के हिस्से को निम्नानुसार बदलता है, और उस निर्देशिका पर "log4j.properties" डालता है जिस पर CLASSPATH सेट किया गया है।

 ClassLoader loader = Thread.currentThread().getContextClassLoader(); URL url = loader.getResource("log4j.properties"); PropertyConfigurator.configure(url); 

जार फ़ाइल में "Log4j.properties" डालने का एक और तरीका मौजूद है।

 jar xvf [YourApplication].jar log4j.properties 

बस सेट -Dog4j.configuration = फ़ाइल: log4j.properties मेरे लिए काम किया

log4j तब आवेदन के वर्तमान कार्य निर्देशिका में फ़ाइल log4j.properties के लिए दिखता है।

याद रखें कि log4j.configuration एक यूआरएल विनिर्देश है, इसलिए अगर आप फाइल सिस्टम पर एक नियमित फाइल का संदर्भ देना चाहते हैं, तो file2: 'log: jsproperties fileename के सामने' file: 'जोड़ो, अर्थात् फ़ाइल पथ क्लासपाथ पर नहीं!

शुरू में मैंने निर्दिष्ट किया था – Dlog4j.configuration = log4j.properties हालांकि यह केवल तभी काम करता है यदि log4j.properties वर्गपथ पर है। जब मैंने log4j.properties को मेरे प्रोजेक्ट में मुख्य / संसाधनों में कॉपी किया और पुनर्निर्माण किया ताकि इसे लक्ष्य निर्देशिका (मेवेन प्रोजेक्ट) में कॉपी किया गया हो, तो यह काम भी किया (या आप अपनी परियोजना के जार में अपना log4j.properties पैकेज कर सकते हैं, लेकिन ऐसा नहीं होगा उपयोगकर्ता को लॉगर कॉन्फ़िगरेशन संपादित करने की अनुमति दें!)।

आज मेरे पास मेरे कोड में यह कोड है

 File log4jfile = new File("./conf/log4j.properties"); PropertyConfigurator.configure(log4jfile.getAbsolutePath()); 

रिश्तेदार पथ JVM (जहां JVM शुरू होता है) की कार्यशील निर्देशिका से है

यह @ kgiannakakis से उत्तर का एक संपादन है: मूल कोड गलत है क्योंकि Properties.load(InputStream) बाद इनपुटस्ट्रीम को सही ढंग से बंद नहीं किया जाता है। लोड Properties.load(InputStream) को कहा जाता है जवाडॉक्स से: The specified stream remains open after this method returns.

================================

मेरा मानना ​​है कि कॉन्फ़िगर पद्धति को एक पूर्ण पथ की उम्मीद है किसी भी तरह, आप पहले गुण ऑब्जेक्ट को लोड करने का भी प्रयास कर सकते हैं:

 Properties props = new Properties(); InputStream is = new FileInputStream("log4j.properties"); try { props.load(is); } finally { try { is.close(); } catch (Exception e) { // ignore this exception } } PropertyConfigurator.configure(props); 

यदि गुण फ़ाइल जार में है, तो आप ऐसा कुछ कर सकते हैं:

 Properties props = new Properties(); InputStream is = getClass().getResourceAsStream("/log4j.properties"); try { props.load(is); } finally { try { is.close(); } catch (Exception e) { // ignore this exception } } PropertyConfigurator.configure(props); 

ऊपर मान लिया गया है कि log4j.properties जार फ़ाइल के मूल फ़ोल्डर में है।

आप ' log4j.debug ' चर को परिभाषित करके log4j आंतरिक लॉगिंग को सक्षम कर सकते हैं।

मेरा मानना ​​है कि log4j.properties निर्देशिका को जावा वर्गपथ में होना चाहिए। आपके मामले में सीडब्ल्यूडी को कक्षा में जोड़ने के लिए काम करना चाहिए

चूंकि JVM तर्क आपके सिस्टम प्रोग्राम चर के रूप में जावा प्रोग्राम को पारित कर दिए जाते हैं, आप संपत्ति को संपादित करने के लिए अपने निष्पादन बिंदु की शुरुआत में इस कोड का उपयोग कर सकते हैं और log4j को उस प्रॉपर्टी को पढ़ सकते हैं जिसे आप सिस्टम गुणों में सेट करते हैं

 try { System.setProperty("log4j.configuration", new File(System.getProperty("user.dir")+File.separator+"conf"+File.separator+"log4j.properties").toURI().toURL().toString()); } catch (MalformedURLException e) { e.printStackTrace(); }