JVM तर्क (ओं) के माध्यम से log4j विन्यास?


133

J4M को ठीक से चलाने के लिए log4j प्राप्त करने के लिए मुझे किस चर को तर्क के रूप में सेट / पास करना होगा? और ठीक से मेरा मतलब है कि शिकायत न करें और कंसोल पर प्रिंट करें। क्या मैं एक विशिष्ट उदाहरण देख सकता हूं?

नोट: मुझे एप्लिकेशन में log4j.properties फ़ाइल बनाने से बचने की आवश्यकता है।


2
पाठक सावधान रहें: यह ध्यान रखना महत्वपूर्ण है कि प्रश्न log4j के बारे में पूछ रहा है, log4j2 नहीं।
neves

जवाबों:


161

क्या आपके पास एक log4j विन्यास फाइल है? बस इसका उपयोग करके संदर्भ लें

-Dlog4j.configuration={path to file}

जहाँ {फाइल करने का रास्ता} पहले से उपसर्ग होना चाहिए file:

संपादित करें: यदि आप log4j2 के साथ काम कर रहे हैं, तो आपको उपयोग करने की आवश्यकता है

-Dlog4j.configurationFile={path to file}

उत्तर https://stackoverflow.com/a/34001970/552525 से लिया गया


ब्रायन - बिल्कुल नहीं जो मैं देख रहा था, लेकिन मुझे लगता है कि यह मेरे आवेदन में एक फ़ाइल को स्थानांतरित करने और जेवीएम आर्ग्स के माध्यम से गुणों को स्थापित करने के बीच एक सभ्य समझौता है।
जोंकलिन

मुझे लगता है कि जैसे-जैसे आपका एप्लिकेशन अधिक जटिल होता है (यदि यह होगा) तो फ़ाइल अधिक प्रबंधनीय हो जाती है क्योंकि आप इसे और अधिक कॉन्फ़िगर करते हैं। हालाँकि मैं मानता हूँ कि मैं यहाँ आपके उपयोग के मामले में अनुमान लगा रहा हूँ।
ब्रायन एग्न्यू

25
{path to file}जरूरतों के साथ prepended जा करने के लिए file:काम करने के लिए इस बात के लिए।
या मैपर

2
@ORMapper - मैंने उचित रूप से संशोधन किया है
ब्रायन एग्न्यू

6
लॉग 4j 2 का उपयोग करते हुए देखें कि संपत्ति का नाम और सिंटैक्स बदल गया है। इस जवाब को देखें ।
जोस एंडियास

161

समाधान निम्नलिखित JVM तर्क का उपयोग कर रहा है:

-Dlog4j.configuration={path to file}

यदि फ़ाइल क्लासपैथ में नहीं है (टॉमकैट के WEB-INF/classesमामले में) लेकिन कहीं न कहीं आप डिस्क पर, उपयोग file:, जैसे

-Dlog4j.configuration=file:C:\Users\me\log4j.xml

अधिक जानकारी और उदाहरण यहाँ: http://log.apache.org/log4j/1.2/manual.html


2
लॉगबैक के लिए:-Dlogback.configurationFile=C:\logback-test.xml
30th

2
फ़ाइल का उल्लेख करने के लिए +1 (टिम ने जो कहा, उसे दोहराते हुए। इसने मुझे log4j के साथ कई बार पागल कर दिया है।
javadba

13
Log4j config को डीबग करने के लिए एक और JVM तर्क बहुत आसान है:-Dlog4j.debug
KC

2
क्या इस विधि के साथ सापेक्ष पथ का उपयोग करना संभव है?
एएए

33

ऐसा लगता है कि बदल गया है (शायद log4j2 के साथ):

-Dlog4j.configurationFile=file:C:\Users\me\log4j.xml

देखें: https://log.apache.org/log4j/2.x/manual/configuration.html


यह मुझे निम्नलिखित अपवाद देता है। C: \ Development \ Eclipses \ EclipseMars \ फ़ाइल: C: \ Users \ ABC \ log4j2.xml मैं कैसे पथ को निरपेक्ष बना सकता हूँ
साइबरनेम

JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"डॉकटर कंटेनरों के लिए, मैंने इस्तेमाल किया अगर डॉकर छवि JAVA_PARAMS को env vars से ओवरराइड करने का समर्थन करती है और फ़ाइल जार के अंदर है।
मार्सेलो डे सेल्स

21

मुझे पता है कि यह पहले से ही उत्तर दिया गया है, लेकिन क्योंकि आपने कहा था, यह वही नहीं है जो आप ढूंढ रहे हैं, मैं निम्नलिखित विकल्प को इंगित करना चाहूंगा:

आप गुणों या xml फ़ाइल के बजाय कॉन्फ़िगरेशन वर्ग का भी उपयोग कर सकते हैं।

-Dlog4j.configuratorClass=com.foo.BarConfigurator

देखें http://logging.apache.org/log4j/1.2/manual.html जानकारी के लिए।


1
यह सही समाधान है अगर कोई कॉन्फिग फाइल बनाने से बचना चाहता है। अपने स्वयं के कस्टम विन्यासकर्ता वर्ग के अंदर आप BasicConfigurator () कॉल कर सकते हैं, या अपने स्वयं के लॉगर और परिशिष्ट बना सकते हैं जो आप चाहते हैं। लेकिन मैं बहुत एक config फ़ाइल पसंद करेंगे!
Skiphoppy

11

आम तौर पर, जब तक आपकी log4j.properties फ़ाइल क्लासपाथ पर है, तब तक Log4j को JVM स्टार्टअप पर स्वचालित रूप से चुनना चाहिए।


1
यह सच है: -Dlog4j.configuration केवल तभी आवश्यक है जब फ़ाइल क्लासपाथ में नहीं थी या यदि आप एक ऐसी फ़ाइल का उपयोग करना चाहते हैं जो क्लासपाथ में पहली बार नहीं मिली है
javadba

8

2015 के अंत के बाद से के रूप में पार्टी के लिए, Log4J 1.x तक पहुँच गया है EOL

Log4J 2.x बाद में JVM विकल्प होना चाहिए-Dlog4j.configurationFile=<filename>


पुनश्च <filename>वर्ग पथ के लिए एक फ़ाइल रिश्तेदार हो सकता है बिनाfile: के रूप में अन्य उत्तर में सुझाव दिया।


2
महत्वपूर्ण उत्तर, क्योंकि अन्य उत्तर मान्य नहीं हैं।
योसेल

1

सापेक्ष पथ भी ठीक है:

java -Dlog4j.configuration=file:".\log4j.properties" -jar com.your-1.0-SNAPSHOT.jar

या

java -Dlog4j.configuration=file:".\log4j.xml" -jar com.your-1.0-SNAPSHOT.jar

0

यदि आप ग्रेडेल का उपयोग कर रहे हैं। आप 'आवेदन' प्लगइन लागू कर सकते हैं और निम्नलिखित कमांड का उपयोग कर सकते हैं

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.