2012-11-05 15 views
23

कॉन्फ़िगर करने के लिए एक XML फ़ाइल (log4j2.xml) का उपयोग करना मैं नया लॉग 4 जे 2 - जावा लॉगिंग फ्रेमवर्क का उपयोग करना चाहता हूं। सबकुछ ठीक काम करता है, लेकिन मैंने लॉगिंग को कॉन्फ़िगर करने के लिए एक कस्टम कॉन्फ़िगरेशन फ़ाइल लोड करने के लिए एक घंटे के बाद से प्रयास किया (लॉग स्तर की तरह)।लॉग 4j 2

यह मेरा log4j2.xml है:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="OFF"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 
    </appenders> 
    <loggers> 
    <root level="error"> 
     <appender-ref ref="Console"/> 
    </root> 
    </loggers> 
</configuration> 

मैं निम्नलिखित की कोशिश की, लेकिन कुछ भी काम करता है:

  • तो यह डिफ़ॉल्ट पैकेज में स्थित है log4j2.xml फ़ाइल ले जाएँ।
  • log4j2.xml फ़ाइल कहीं भी परियोजना में
  • नाम log4j2.xml फ़ाइल "log4j.xml" के रूप में ले जाएँ
  • अपनी परियोजना में एक फ़ोल्डर बनाएँ, आपकी log4j2.xml फ़ाइल जगह है और करने के लिए कि फ़ोल्डर जोड़ने आपका रनटाइम क्लासपाथ

चूंकि official website मेरी मदद नहीं कर सकता है, मुझे उम्मीद है कि आप मेरी कॉन्फ़िगरेशन फ़ाइल के साथ लॉग 4j 2 काम करने में मेरी सहायता कर सकते हैं।

+1

आप टिप्पणी करके मेरा उत्तर पर कुछ प्रतिक्रिया उपलब्ध कराने एतराज़ है? क्या यह मदद करता है या क्या आप अभी भी ERROR के अलावा अन्य स्तरों के लिए लॉग संदेश नहीं देख रहे हैं? – Andrey

उत्तर

30

महत्वपूर्ण: क्योंकि कुछ भी नहीं त्रुटि स्तर का उपयोग कर लॉग ऑन है कुछ भी नहीं हो रहा है है यकीन है कि विन्यास फाइल के नाम log4j2.xml है (ध्यान दें अवधि से पहले 2) के रूप में करने के लिए log4j.xml

मेरा अनुमान का विरोध किया। तुम इतनी तरह एक और लकड़हारा जोड़ने की कोशिश कर सकते हैं:

<logger name="com.foo.Bar" level="trace"> 
    <appender-ref ref="Console"/> 
</logger> 

Configuration खंड की तरह लग रहा है एक अच्छा संसाधन हो सकता है।

आगे विस्तार करने के लिए, आप स्तर "त्रुटि" करने के लिए सेट के साथ एक लकड़हारा निर्दिष्ट कर रहे हैं:

<root level="error"> 
    <appender-ref ref="Console"/> 
</root> 

इसका मतलब यह है कि केवल संदेशों Level.ERROR का उपयोग कर लॉग में दिखाई देगा लॉग इन किया। कम प्रतिबंधक स्तर के साथ लॉगर जोड़ना लॉग में अधिक संदेश प्रकट होने की अनुमति देगा। मैं मैनुअल के Architecture अनुभाग पर एक नज़र डालने की सलाह देता हूं (यदि आप पृष्ठ को स्क्रॉल करते हैं तो आपको तालिका दिखाई देगी जो लॉगिंग स्तर बताती है)। वैकल्पिक रूप से, आप बस,

विन्यास आपके द्वारा निर्दिष्ट देखते हुए कोड को क्रियान्वित (बजाय एक नया लकड़हारा जोड़ने का) का पता लगाने के लिए रूट लकड़हारा के स्तर को बदल सकता है नीचे पैदावार 13:27:50.244 [main] ERROR com.example.Log4j2Tester - testing ERROR level

package com.example; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 

public class Log4j2Tester { 
    private static final Logger LOG = LogManager.getLogger(Log4j2Tester.class); 

    public static void main(String[] args) { 
     LOG.error("testing ERROR level"); 

//if you change the level of root logger to 'trace' 
//then you'll also see something like 
// 13:27:50.244 [main] TRACE com.example.Log4j2Tester - exiting application 
     LOG.trace("exiting application"); 
    } 
} 
+0

सब कुछ ठीक काम करता है। आपके विस्तृत उत्तर के लिए धन्यवाद :) – Rubberducker

+0

@FentonCrackshell: मदद करने में खुशी हुई! – Andrey

+0

अंत में 'log4j2.xml' कहां रखा जाए? –

-4

की तरह कुछ रखो परियोजना के रूट फ़ोल्डर src/main में LOG4J2.XML

+1

/बिन सही है – Blub

1

मेरे 2 सेंट:

सॉफ्टवेयर सिस्टम: log4j 2, NetBeans और TestNG।

मुझे एक ही समस्या थी, लेकिन परीक्षण वातावरण के साथ।

डिफ़ॉल्ट रूप से, (यानी, log4j2.xml फ़ाइल में src/में स्थित है) लॉगिंग स्तर त्रुटि पर सेट है। लेकिन परीक्षण चलाते समय, मैं लॉगिंग को ट्रेस करना चाहता हूं। और, निश्चित रूप से कुछ कम या कम हार्डकोडेड फ़ाइल में लॉग इन किया गया है।

है यही कारण है, कुछ मूल रूप से मैंने किया था की तरह:

public class someTestClass { 
     static final Logger log=LogManager.getLogger("test.someTestClass"); 
...... 
@Test 
public void SomeMethod(){ 

System.setProperty("log4j.configurationFile", "resources/log4j2_conf.xml"); 

log.trace("This will not show because the default logging level is ERROR 
and the resources/log4j2_conf.xml is not loaded"); 

} 

समस्या समय System.setProperty अनुदेश निष्पादित किया जाएगा द्वारा, log4j पहले से ही स्थापित किया जाएगा कि हो (है कि, स्थिर अंतिम है लॉगर लॉग = ... पहले निष्पादित किया जाएगा)

मैं क्या किया था, इस तरह @BeforeClass का उपयोग करें:।

public class someTestClass { 
    Logger log;  
    @BeforeClass 
    public void setLogger(){ 
     SetEnv.SetEnvironment(); 
     log = LogManager.getLogger("TestRealClientRealServer"); 
    } 
...... 
    @Test 
    public void SomeMethod(){ 

     log.trace("This will show, because in log4j2_conf.xml 
the root level is set to TRACE"); 

    } 
} 

Btw, संसाधनों/परीक्षण संकुल में रखा जा सकता है ताकि आप घ "test" log4j सेटअप को शिप न करें।

आशा है कि यह

1

में मदद करता है वर्ग पथ रूट फ़ोल्डर में डिफ़ॉल्ट विन्यास फाइल, log4j2.xml (या log4j2-test.xml) का उपयोग करने के अलावा, आप विन्यास फाइल पथ निर्दिष्ट करने के लिए इस प्रणाली संपत्ति का उपयोग कर सकते (ग्रहण उपयोगकर्ताओं के लिए जावा कमांड लाइन में डी)

log4j.configurationFile='xxxx/xxx/xxx' 
0

एक टिप का उपयोग करें:

सही परियोजना पर क्लिक करें और क्लिक करें "ताज़ा"। सुनिश्चित करें कि आप ग्रहण में log4j2.xml फ़ाइल देख सकते हैं।

पूर्ण यहाँ जवाब: log4j 2 - configuration issue

2

सुझाव: कस्टम log4j फ़ाइलों का उपयोग करने के लिए। (बल्कि डिफ़ॉल्ट "log4j2.xml" चीज़ी)। कुछ मामलों में एकाधिक विन्यास होना उपयोगी हो सकता है।

शायद ज़रुरत पड़े, तो किसी भी एक Maven का उपयोग करने और log4j2 कॉन्फ़िगर करना चाहते हैं, यहाँ तुम क्या अपने pom.xml में की जरूरत है:

   <systemProperties> 
        <property> 
         <name>/log4j.configuration</name> 
         <value>.../../Foo-log4j.xml</value> 
        </property> 
       </systemProperties> 

डिफ़ॉल्ट रूप से, "log4j2.xml" फ़ाइल की उम्मीद नाम है। लेकिन हालांकि, हम log4j.configuration सिस्टम प्रॉपर्टी सेट करके इसे ओवरराइड कर सकते हैं। उपर्युक्त उदाहरण में, मैंने कस्टम कॉन्फ़िगरेशन फ़ाइल का उपयोग "Foo-log4j.xml" के रूप में किया है।

आप CLI के माध्यम से एक ही कर सकते हैं:

-Dlog4j.configuration="Foo-log4j.xml" 
+0

हाय, मुझे इस पर कुछ और जानकारी चाहिए, मैंने कॉन्फ़िगरेशन को सुझाव दिया है लेकिन यह अभी भी काम नहीं कर रहा है –

+0

समस्या क्या है? –

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