2009-05-18 14 views
73

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

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

उत्तर

44

LogManager कक्षा निर्धारित करता है कि static block में कौन सी log4j कॉन्फ़िगरेशन का उपयोग करना है जो वर्ग लोड होने पर चलता है। तीन विकल्प अंत उपयोगकर्ताओं के लिए लक्षित कर रहे हैं:

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

    -Dlog4j.configuration=<path to properties file>

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

भी online documentation देखें।

+0

यह कैसे पता चलेगा यह एक "log4j विन्यास फाइल है?" फ़ाइल नाम क्या है? (log4j.xml?) – Chad

+1

@ चाड: मैंने आपके प्रश्न को संबोधित करने के लिए अपना जवाब संपादित कर लिया है। यह देखने के लिए कि यह कैसे लागू किया गया है, कृपया स्थिर ब्लॉक के लिंक को देखें। –

+0

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

6

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

52

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

+5

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

4

मैं 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> 
संबंधित मुद्दे