मैं JUnit परीक्षण वर्ग में log4j को कहां से कॉन्फ़िगर करूं?


85

पिछले JUnit परीक्षण मामले को देखते हुए, मैंने लिखा, मैंने क्लास कंस्ट्रक्टर के अंदर log4j के BasicConfigurator.configure () विधि को बुलाया। यह ठीक काम करने के लिए ठीक है कि एक्लिप्स के "एकल भाग के रूप में JUnit परीक्षण मामले" कमांड से चल रहा है। लेकिन मुझे लगता है कि यह गलत है: मुझे पूरा यकीन है कि हमारा मुख्य परीक्षण सूट इन सभी वर्गों को एक प्रक्रिया से चलाता है, और इसलिए log4j कॉन्फ़िगरेशन कहीं न कहीं उच्चतर होना चाहिए।

लेकिन मुझे अभी भी कुछ समय के लिए अपने आप से एक परीक्षण केस चलाने की आवश्यकता है, जिस स्थिति में मैं लॉग 4 जे कॉन्फ़िगर करना चाहता हूं। मुझे कॉन्फ़िगरेशन कॉल कहाँ लगाना चाहिए ताकि परीक्षण केस स्टैंडअलोन चलने पर चला जाए, लेकिन तब नहीं जब परीक्षण मामला बड़े सूट के हिस्से के रूप में चलाया जाए?


मैं यहाँ log4j 1.x मानने जा रहा हूँ, 2 नहीं ...
rogerdpack

जवाबों:


51

LogManagerवर्ग को निर्धारित करता है जो log4j config एक में उपयोग करने के लिए स्थिर ब्लॉक जो जब वर्ग भरी हुई है चलाता है। अंतिम उपयोगकर्ताओं के लिए तीन विकल्प हैं:

  1. यदि आप log4j.defaultInitOverrideगलत निर्दिष्ट करते हैं, तो यह log4j को बिल्कुल भी कॉन्फ़िगर नहीं करेगा।
  2. मैन्युअल रूप से कॉन्फ़िगरेशन फ़ाइल के लिए पथ निर्दिष्ट करें और क्लासपैथ खोज को ओवरराइड करें। आप निम्न तर्क का उपयोग करके सीधे कॉन्फ़िगरेशन फ़ाइल का स्थान निर्दिष्ट कर सकते हैं java:

    -Dlog4j.configuration=<path to properties file>

    आपके परीक्षण धावक विन्यास में।

  3. अपने परीक्षण के दौरान log4j config फ़ाइल के लिए classpath को स्कैन करने के लिए log4j को अनुमति दें। (डिफ़ॉल्ट)

ऑनलाइन दस्तावेज भी देखें ।


यह कैसे पता चलेगा कि यह "log4j कॉन्फ़िगरेशन फ़ाइल है?" फ़ाइल नाम क्या है? (log4j.xml?)
चाड

1
@Chad: मैंने आपके सवाल का जवाब देने के लिए अपना जवाब संपादित किया है। कृपया स्थैतिक ब्लॉक का लिंक देखें कि यह कैसे लागू किया गया है।
पॉल मोरी

मैं log4j2 का उपयोग कर रहा हूं और मुझे फ़ाइल को इंगित करने के लिए निम्न सेटिंग का उपयोग करना पड़ा है -Dlog4j.configurationFile=log4j2.xml:। इसके अलावा, यदि आप लोडिंग / स्टार्टअप को डीबग करने का प्रयास कर रहे हैं, तो यह सेटिंग उपयोगी हो सकती है -Dlog4j2.debug=true:।
केंट

इस उत्तर पर थोड़ा और विशिष्ट होने का कोई तरीका?
निशान

61

मैं आमतौर पर src / test / Resources में एक log4j.xml फ़ाइल डाल देता हूं और log4j को इसे स्वयं ढूंढने देता हूं: कोई कोड आवश्यक नहीं है, डिफ़ॉल्ट log4j आरंभीकरण इसे उठाएगा। (मैं आम तौर पर वैसे भी 'लॉबग' के लिए अपने स्वयं के लकड़हारे सेट करना चाहता हूं)


6
मानक निर्माण परीक्षण के लिए, मैं Log4j को चेतावनी या यहां तक ​​कि त्रुटि पर सेट करूंगा। यदि परीक्षण सफल होते हैं (नकारात्मक परीक्षण भी) तो कोई लॉगिंग नहीं होनी चाहिए, जिससे उपयोगकर्ताओं का ध्यान जाता है।
कीकी

2
हां, जो log4j 1.x के लिए सही है। Log4j2 के लिए स्पष्ट रूप से आप log4j2-test.properties फ़ाइल की तरह अधिक "विदेशी" फ़ाइलों का उपयोग कर सकते हैं ... logging.apache.org/log4j/2.x/manual/configuration.html :)
rogerdit

6

आप जावा (SLF4J) के लिए सरल लॉगिंग मुखौटा में देखना चाहते हैं । यह एक मुखौटा है जो Log4j के चारों ओर लपेटता है जिसे Log4j जैसे प्रारंभिक सेटअप कॉल की आवश्यकता नहीं है। यह भी काफी आसान है कि एपीआई अंतर कम से कम है, इसलिए Slf4j के लिए Log4j को स्विच करना आसान है।


5

मैं log4j.xml में सिस्टम गुण का उपयोग करता हूं:

...
<param name="File" value="${catalina.home}/logs/root.log"/>
...

और इसके साथ परीक्षण शुरू करें:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <systemProperties>
            <property>
                <name>catalina.home</name>
                <value>${project.build.directory}</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.