लकड़हारा (log4j) के लिए कोई एपेंडर्स नहीं मिला?


368

मैंने अपने buildpath में log4j डाल दिया है, लेकिन मुझे अपना आवेदन चलाने पर निम्नलिखित संदेश मिलता है:

log4j:WARN No appenders could be found for logger (dao.hsqlmanager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

इन चेतावनियों का क्या मतलब है? व्हाट्स अप्पेंडर यहाँ?


5
यह एक रनटाइम चेतावनी है। क्या आप सुनिश्चित हैं कि जब आप संकलन करते हैं तो आप इसे देखते हैं?
मबा

5
क्या आपने चेतावनी की अंतिम पंक्ति में URL पर जाने का प्रयास किया था?
जेसप

4
हाँ!!! लेकिन यह बहुत कुछ नहीं कहता ... मुझे पता चला कि मुझे अपने परिशिष्ट को कॉन्फ़िगर करने के लिए एक संपत्ति फ़ाइल की आवश्यकता है!
मैक्सिमस

ऐप्पलेंडर को जोड़ने के लिए कॉन्फ़िगरेशन फ़ाइलों को मैन्युअल रूप से संपादित करें। सुनिश्चित करें कि आपके पास सही और मान्य कॉन्फ़िगरेशन दस्तावेज़ है।
रोमन सी।

प्रश्न 4 भी देखें : WARN web.xml में
लकड़हारे के

जवाबों:


464

यह लघु परिचय log4j गाइड के लिए थोड़ा पुराना है लेकिन फिर भी मान्य है।

यह गाइड आपको लकड़हारा और ऐप्पेंडर्स का उपयोग करने के बारे में कुछ जानकारी देगा।


बस आपको जाने के लिए आपके पास दो सरल दृष्टिकोण हैं जिन्हें आप ले जा सकते हैं।

सबसे पहले इस लाइन को अपनी मुख्य विधि में जोड़ना है:

BasicConfigurator.configure();

दूसरा तरीका यह है कि इस मानक log4j.properties(उपर्युक्त गाइड से लिया गया) फ़ाइल को अपने वर्गपथ में जोड़ें:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

3
बस पहला कदम ठीक है। लघु परिचय से उद्धरण log4j गाइड
ray6080

65
नई ठोकर के लिए ... src / main / Resources के लिए log4j.properties फ़ाइल जोड़ें और यह मान लें कि आपके पास एक मावेन प्रोजेक्ट है। एसकेजी / मुख्य / संसाधनों में सामग्री को क्लासपाथ पर शामिल किया गया है।
केनी

3
IntelliJ विचार खुले मॉड्यूल सेटिंग में और अपने संसाधन फ़ोल्डर का चयन करें और संसाधनों पर क्लिक करें, यह स्वचालित रूप से आपके हर संसाधन को क्लासपाथ में जोड़ देगा।
वकास

1
मदद नहीं की। मैं C ++ के लिए एक्लिप्स नियॉन का उपयोग करता हूं, और मैंने एक्जीक्यूटेबल के साथ log4j.properties को लगाया है और मदद नहीं की है
नदाव बी

log4j.rootLogger=DEBUG, A1वह रेखा है जो मुझे हर समय याद आ रही थी।
मोहम्मद फैसल

74

ऐसा लगता है कि आपको log4j.propertiesग्रहण में अपनी फ़ाइल के स्थान को क्लासपाथ में जोड़ना होगा ।

सुनिश्चित करें कि आपका प्रोजेक्ट ग्रहण में खुला है, फिर ग्रहण के शीर्ष पर "रन" मेनू पर क्लिक करें और निम्नलिखित पर क्लिक करें:

  1. Daud
  2. कॉन्फ़िगरेशन चलाएँ
  3. क्लासपाथ (टैब)
  4. उपयोगकर्ता प्रविष्टियाँ
  5. उन्नत (दाईं ओर बटन)
  6. फ़ोल्डर जोड़ें
  7. फिर उस फ़ोल्डर पर जाएँ जिसमें आपकी log4j.properties फ़ाइल है
  8. लागू
  9. Daud

त्रुटि संदेश अब दिखाई नहीं देना चाहिए।


चेतावनी संदेश अब दिखाई नहीं दे रहे हैं लेकिन फिर भी लॉग वांछित स्थान पर नहीं लिखे गए हैं
अर्पण सैनी

48

त्वरित समाधान:

  1. मुख्य फ़ंक्शन में कोड जोड़ें :

    String log4jConfPath = "/path/to/log4j.properties";
    PropertyConfigurator.configure(log4jConfPath);
  2. log4j.properties नामक एक फ़ाइल / पथ / पर बनाएँ

    log4j.rootLogger=INFO, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

Log4j.properties फ़ाइल को src / test / संसाधन जैसी संसाधन निर्देशिका के अंदर रखें
आलोक

लॉग 4j.properties पथ की स्पष्ट घोषणा से बचने के लिए; इसे अपने प्रोजेक्ट फ़ोल्डर में रखें और इसे स्ट्रिंग लॉग 4jConfPath = System.getProperty ("user.dir") + File.separator + "log4j.properties" की तरह एक्सेस करें;
अमीमो बेन्जा

36

यह सिर्फ एक चेतावनी है।

फिक्सिंग

यह तब होता है जब डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइलें log4j.propertiesऔर log4j.xmlनहीं मिल सकती हैं और एप्लिकेशन कोई स्पष्ट कॉन्फ़िगरेशन नहीं करता है।

इसे ठीक करने के लिए, बस क्लासपाथ पर (आमतौर पर जार फ़ाइलों के समान) अपने स्थान को बनाएं / कॉपी करें log4j.propertiesया log4j.xmlअपने स्थान पर रखें ।

वैकल्पिक रूप से जावा विकल्प सेट करें -Dlog4j.configuration=file:///path/to/log4j.properties:।

log4jThread.getContextClassLoader().getResource()डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइलों का पता लगाने के लिए उपयोग करता है और सीधे फ़ाइल सिस्टम की जांच नहीं करता है। उपयोग करने के लिए उपयुक्त स्थान को जानना log4j.propertiesया log4j.xmlउपयोग में कक्षा लोडर की खोज रणनीति को समझना आवश्यक है। log4jकंसोल के लिए आउटपुट के बाद से कोई डिफ़ॉल्ट कॉन्फ़िगरेशन प्रदान नहीं करता है या फ़ाइल सिस्टम कुछ वातावरणों में निषिद्ध हो सकता है।

डिबगिंग

डीबगिंग के लिए, आप -Dlog4j.debug=trueपैरामीटर का उपयोग करने का प्रयास कर सकते हैं ।

का विन्यास log4j.properties

का नमूना विन्यास log4j.properties:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN

यहां एक और कॉन्फ़िगरेशन फ़ाइल है जो कई ऐपेंडर्स का उपयोग करती है:

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

अपाचे सोलर

अगर Solr का उपयोग कर रहे हैं , तो <solr>/example/resources/log4j.propertiesउस स्थान पर कॉपी करें क्लासपाथ

log4j.propertiesसोलर से नमूना विन्यास इस प्रकार है:

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

यह सभी देखें:


13

यहां अधिकांश उत्तरों ने सुझाव दिया कि log4j.propertiesफ़ाइल को सही स्थान पर रखा जाए (मावेन परियोजना के लिए, इसे अंदर स्थित होना चाहिएsrc/main/resources )

लेकिन मेरे लिए, समस्या यह है कि मेरा log4j.propertiesसही ढंग से कॉन्फ़िगर नहीं किया गया है। यहाँ एक नमूना है जो मेरे लिए काम करता है, आप इसे पहले आज़मा सकते हैं।

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

1
तथ्य यह है कि log4j मानता है कि "फ़ाइल नहीं मिल सकती है" और "फ़ाइल में अपूर्ण कल्पना" एक ही त्रुटि है एक समय नुक़सान है।
एड नॉरिस

1
मेरे लिए, यह सबसे अच्छा जवाब है। मैं मतदान करता हूं और मैंने आपके उत्तर में कुछ स्पष्टीकरण जोड़े हैं।
schlebe

मेरे लिए सबसे अच्छा जवाब !!!
15

8

जैसा कि पहले बताया गया है कि 2 दृष्टिकोण हैं

सबसे पहले इस लाइन को अपनी मुख्य विधि में जोड़ना है:

BasicConfigurator.configure();

दूसरा दृष्टिकोण इस मानक log4j.properties को जोड़ना है फ़ाइल को अपने :

दूसरा तरीका अपनाते हुए आपको यह सुनिश्चित करने की ज़रूरत है कि आप फ़ाइल को ठीक से इनिशियलाइज़ कर लें, जैसे।

Properties props = new Properties();
props.load(new FileInputStream("log4j property file path"));
props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

सुनिश्चित करें कि आप लॉग फ़ाइलों को संग्रहीत करने के लिए आवश्यक फ़ोल्डर बनाते हैं।


मुझे वही समस्या हो रही थी और मैंने BasicConfigurator.configure () का उपयोग किया; मुख्य विधि में और अब कोड ठीक से निष्पादित हो रहा है।
सुरभि पांडेय

7

आप Loggerकिसी संदेश को लॉग करने के लिए अपने कोड का उपयोग करते हैं । Appenderएक वस्तु एक के साथ जोड़ दिया है Loggerएक विशेष लक्ष्य के लिए संदेश लिखने के लिए। कर रहे हैं FileAppenderपाठ फ़ाइलों या लिखने के लिएConsoleAppender कंसोल के लिए लिखने के लिए। आपको अधिक सहायता के लिए अपने कोड को लकड़हारा और परिशिष्ट सेटअप दिखाना होगा।

कृपया लकड़हारा और ऐपेंडर की बातचीत की बेहतर समझ के लिए ट्यूटोरियल पढ़ें ।


6

सुनिश्चित करें कि गुण फ़ाइल ठीक से सेट है। और फिर, ऐसा लगता है कि संकलक गुण फ़ाइल नहीं ढूँढ सकता है, आप पॉम पर अनुसरण के रूप में सेट कर सकते हैं (केवल जब आप मावेन परियोजना का उपयोग करते हैं)।

<build>
       <sourceDirectory> src/main/java</sourceDirectory>
       <testSourceDirectory> src/test/java</testSourceDirectory>
        <resources>
             <resource>
                  <directory>resources</directory>
             </resource>
        </resources>           
</build >

इस! मैंने जवाब खोजने के लिए घंटों बिताए। मेरा केस कोड लिनक्स में अच्छी तरह से काम करता है, लेकिन विंडोज़ (समान एनबी आईडीई) में यह त्रुटि है और उपरोक्त सभी समाधान काम नहीं करते हैं!
Tiana987642

5

मुझे समान त्रुटि मिली। यहाँ समस्या है जो इस त्रुटि संदेश की ओर ले जाती है:

मैं कुछ वस्तुओं का निर्माण करता हूं जो लॉग 4j को कॉन्फ़िगर करने से पहले लकड़हारे का उपयोग करते हैं:

Logger.getLogger(Lang.class.getName()).debug("Loading language: " + filename);

समाधान: मुख्य विधि में शुरुआत में log4j कॉन्फ़िगर करें:

PropertyConfigurator.configure(xmlLog4JConfigFile); 
// or BasicConfigurator.configure(); if you dont have a config file

बहुत बहुत धन्यवाद!!! हर कोई बस वसंत या टॉमकैट मान रहा है, या जो भी कॉन्फ़िगरेशन को इनिशियलाइज़ करना है।
विंडगैजर

3

मुझे लगता है कि आपको यह समझना चाहिए कि log4j जार फ़ाइल या Java कोड log4j कॉन्फ़िगरेशन फ़ाइलों के लिए कहाँ दिखता है।

src/main/resources/log4j.propertiesग्रहण मार्ग है। उन्हें एक उचित स्थान पर रखें ताकि आपको कोड में निरपेक्ष पथ को कठिन कोड न करना पड़े।

मेरे लेख और उस के लिए नमूना समाधान पढ़ें http://askyourquestions.info/2016/03/27/how-to-see-where-the-log-is-logger-in-slf4j/


3

ऐसा होने का एक और कारण (RCP4 में) यह है कि आप अपनी लक्ष्य फ़ाइल में कई लॉगिंग फ़्रेमवर्क का उपयोग कर रहे हैं। एक उदाहरण के रूप में, यह तब होगा जब आप अपने लक्ष्य फ़ाइलों की सामग्री टैब में slf4j, log4j और ch.qos.logback.slf4j के संयोजन का उपयोग करते हैं।


3

पहले कोड के रूप में निम्नलिखित जोड़ें:

Properties prop = new Properties();
prop.setProperty("log4j.rootLogger", "WARN");
PropertyConfigurator.configure(prop);

2

मेरे मामले में, त्रुटि झंडा " संवेदनशीलता " थी। यदि आप रूट प्रोजेक्ट पैकेज के लिए "गलत" हैं, तो बच्चे के पैकेज में एक परिशिष्ट नहीं होगा और आपको " परिशिष्ट नहीं मिला " त्रुटि दिखाई देगी ।


2

मुझे उसी मुद्दे का सामना करना पड़ा जब मैंने ज्यूनीत टेस्ट क्लास चलाने की कोशिश की।

समस्या को हल करने के बाद मैं src / परीक्षण / संसाधन फ़ोल्डर में log4j.properties फ़ाइल को मैन्युअल रूप से जोड़ा गया है।

नीचे दिए गए कोड को log4j.properties फ़ाइल में जोड़ने से समस्या हल हो गई:

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\logging.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

1

मैं इस मुद्दे में भाग गया जब intellij 12 में maven के साथ एक निष्पादन योग्य जार बनाने की कोशिश कर रहा था। यह पता चला है कि क्योंकि जावा मैनिफ़ेस्ट फ़ाइल में एक वर्ग पथ शामिल नहीं था log4j गुण फ़ाइल रूट स्तर पर नहीं मिल सकती है (जहां जहां जार फ़ाइल से निष्पादित किया गया था।)

FYI करें मैं इस तरह लकड़हारा हो रहा था:

Logger log = LogManager.getLogger(MyClassIWantedToLogFrom.class);

और मैं इसे शामिल करने वाली एक पोम फ़ाइल के साथ काम करने में सक्षम था:

         <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath> 
                        <mainClass>com.mycompany.mainPackage.mainClass</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>.</Class-Path> <!-- need to add current directory to classpath properties files can be found -->
                    </manifestEntries>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

1

सुनिश्चित करें कि आपका प्रोजेक्ट ग्रहण में खुला है, फिर ग्रहण के शीर्ष पर "रन" मेनू पर क्लिक करें और निम्नलिखित पर क्लिक करें:

  1. Daud

  2. कॉन्फ़िगरेशन चलाएँ

  3. क्लासपाथ (टैब)

  4. उपयोगकर्ता प्रविष्टियाँ

  5. दाईं ओर जार जोड़ें

  6. log4j जार फ़ाइल जोड़ें

  7. लागू

  8. Daud

त्रुटि संदेश अब दिखाई नहीं देना चाहिए।


1

कारण staticकुछ में शब्द की कमी हो सकती है :

final static Logger logging = Logger.getLogger(ProcessorTest.class);

अगर मैं लकड़हारा उदाहरण क्षेत्र में बनाता हूं, तो मुझे वास्तव में यह बहुत चेतावनी मिल रही है:

No appenders could be found for logger (org.apache.kafka.producer.Sender)

इससे भी बदतर, चेतावनी इंगित करती है कि नहीं ProcessorTest, जहां गलती रहती है, लेकिन समस्याओं के स्रोत के रूप में बिल्कुल अलग वर्ग (प्रेषक) के लिए। उस वर्ग ने सही लकड़हारा सेट किया है और किसी भी बदलाव की आवश्यकता नहीं है! हम उम्र के लिए समस्या देख सकते हैं!


1

जब मैं log4j2 का उपयोग करता हूं तो मुझे उसी समस्या का सामना करना पड़ा। मेरी समस्या गलत आश्रित पुस्तकालय का उपयोग करने के कारण होती है:

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <scope>runtime</scope>
    </dependency>

इसके बजाय, मुझे उपयोग करना चाहिए:

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <scope>runtime</scope>
    </dependency>

मेरे मामले में, मेरे पास "संसाधन" निर्देशिका में एक log4j2.xml परिभाषित है, और इसके द्वारा इसका उपयोग करने के लिए निर्दिष्ट है:

System.setProperty("log4j.configurationFile", "log4j2.xml");

1

Log4J इस चेतावनी संदेश को प्रदर्शित करता है जब Log4j जावा कोड आपके प्रोग्राम में पहली लॉग लाइन बनाने के लिए खोज कर रहा है।

इस समय, Log4j 2 चीजें बनाते हैं

  1. यह log4j.propertiesफ़ाइल खोजने के लिए खोज
  2. यह परिशिष्ट में परिभाषित करने के लिए तुरंत खोज करता है log4j.properties

यदि फ़ाइल log4Jनहीं मिलती log4j.propertiesहै या यदि घोषित किए गए परिशिष्ट log4j.rootloggerको log4j.propertiesफ़ाइल में कहीं और परिभाषित नहीं किया गया है तो चेतावनी संदेश प्रदर्शित होता है।

चेतावनी: गुण फ़ाइल की सामग्री सही होनी चाहिए।

निम्नलिखित सामग्री सही नहीं है

log4j.rootLogger=file

log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=c:/Trace/MsgStackLogging.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%m%n
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=false

क्योंकि fileपरिशिष्ट को LOWER-CASE log4j.rootloggerस्टेटमेंट में घोषित किया गया है और UPPER-CASE का उपयोग करके log4j.appender स्टेटमेंट में परिभाषित किया गया है!

एक सही फाइल होगी

log4j.rootLogger=FILE

log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=c:/Trace/MsgStackLogging.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%m%n
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=false

यदि MAVEN का उपयोग किया जाता है, तो आपको log4j.properties फ़ाइलों को src/main/resourcesAND में रखना होगा और MAVEN बिल्ड शुरू करना होगा ।

Log4j.properties फ़ाइल को तब target/classesफ़ोल्डर में कॉपी किया जाता है ।

Log4J उस log4j.propertiesफ़ाइल का उपयोग करें जो इसमें मिली है target/classes!


1

मुझे यह समस्या भी हुई। मैं IntelliJ IDEA में संसाधन निर्देशिका को चिह्नित करना भूल गया

  1. अपनी निर्देशिका पर राइट क्लिक करें
  2. मार्क निर्देशिका के रूप में
  3. संसाधन जड़

1

यदि आप ग्रहण का उपयोग कर रहे हैं और यह समस्या पहले से कहीं ठीक होने के बाद कहीं से भी प्रकट हुई, तो जाने का प्रयास करें Project - Clean - Clean


0

ग्रहण से JUnit परीक्षण log4j.propertiesचलाते समय मेरी ग्रहण स्थापना नहीं मिल सकी , भले ही फ़ाइल स्थित थीsrc/test/resources

कारण यह था कि एक्लिप्स (या एम 2 कनेक्टर) ने src/test/resourcesअपेक्षित आउटपुट फ़ोल्डर से सामग्री की प्रतिलिपि नहीं बनाईtarget/test-classes - मूल कारण यह था कि जावा बिल्ड पाथ के तहत प्रोजेक्ट के गुणों में - स्रोत टैब -> बिल्ड पथ पर स्रोत फ़ोल्डर -> src / परीक्षण / संसाधन , किसी तरह एक Excluded: **प्रविष्टि थी। मैंने उस बहिष्कृत प्रविष्टि को हटा दिया ।

वैकल्पिक रूप से, मैं मैन्युअल रूप से कॉपी कर सकता src/test/resources/log4j.propertiesथा target/test-classes/log4j.properties


0

यदि log4j.propertiesआप वास्तव में क्लासपाथ पर हैं, तो आप किसी ऐप सर्वर पर तैनाती के लिए WAR फाइल बनाने के लिए स्प्रिंग बूट का उपयोग कर रहे हैं, आप web.xmlस्प्रिंग बूट के ऑटोकैफिगर के पक्ष में एक फाइल को छोड़ रहे हैं , और आपको कोई लॉग संदेश नहीं मिल रहा है, जो आपको स्पष्ट रूप से बताने की आवश्यकता है Log4j कॉन्फ़िगर करें। मान लें कि आप Log4j 1.2.x का उपयोग कर रहे हैं:

public class AppConfig extends SpringBootServletInitializer {

    public static void main( String[] args ) {
        // Launch the application
        ConfigurableApplicationContext context = SpringApplication.run( AppConfig.class, args );
    }

    @Override
    protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
        InputStream log4j = this.getClass().getClassLoader().getResourceAsStream("log4j.properties");
        PropertyConfigurator.configure(log4j);
        return application;
    }

// Other beans as required...
}

0

हो सकता है कि relevent प्रोजेक्ट को java build path में log4j सम्‍मिलित करें, मैं इसमें mahout_h2o जोड़ता हूं जब मैंने ग्रहण के उपयोग से एक mahout प्रोजेक्ट में इस समस्या को पूरा किया, तो यह काम करता है!


0

यदि आप बहुत सारी परियोजनाओं के साथ मिलकर काम करते हैं तो आपको एक स्टाइल समस्या का सामना करना पड़ सकता है।

* आपके पास एक lof4j.properties फ़ाइल होनी चाहिए और इस फ़ाइल में अन्य प्रोजेक्ट के लॉग गुण शामिल हैं।

* जब आप परियोजना के लिनक्स ओएस पर काम करते हैं, तब लॉग 4 जे गुण फाइलों को src पथ में डालने का प्रयास कर सकते हैं, अन्य परियोजना और log4.properties फ़ाइलों के कार्य क्लासपाथ पर एक फ़ोल्डर में हो सकते हैं।


0

पहला आयात:

 import org.apache.log4j.PropertyConfigurator;

फिर नीचे कोड को मुख्य विधि में जोड़ें:

String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);

पथ पर एक फ़ाइल बनाएँ और उस फ़ाइल में नीचे कोड जोड़ें।

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

0

इस साइट पर समाधान ने मेरे लिए https://crunchify.com/java-how-to-configure-log4j-logger-property-correctly/ पर काम किया । अब मुझे log4j से कोई चेतावनी नहीं दिख रही है

मैंने इसे एक log4j.properties फ़ाइल में रखा है जिसे मैंने src / main / resource में डाला है

# This sets the global logging level and specifies the appenders
log4j.rootLogger=INFO, theConsoleAppender

# settings for the console appender
log4j.appender.theConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.theConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.theConsoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

0

सबसे पहले: एक log4j.properties फ़ाइल बनाएँ

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

इसे src / main / resource / में रखें

उसके बाद, इस 2 निर्भरता का उपयोग करें:

<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>

इस अंतिम निर्भरता को POM फ़ाइल में जोड़ना आवश्यक है:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

0

Log4j JVM तर्क Dlog4j.configuration पर विचार करें

सामान्य रूप में:

JVM तर्क जोड़ें जो log4j कॉन्फिग फ़ाइल को इंगित करता है। सिंटैक्स कुछ इस प्रकार है:

java [ options ] -jar file.jar [ arguments ]

वास्तविक कमांड लाइन का एक नमूना निम्नलिखित की तरह है:

java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2

IntelliJ IDE उपयोगकर्ताओं के लिए:

1.Run/Debug Configurations
2.Edit configurations...
3.VM options
4.Enter the same value also starting with "-D"

सुझाव:

1. ग्रहण आईडीई उपयोगकर्ताओं को एक समतुल्य दृष्टिकोण मिलेगा

2. रन / डीबग कॉन्फ़िगरेशन संपादक के लिए, यह बहुत संभावना है कि, समय की शुरुआत में, आपकी विशेष निष्पादन योग्य फ़ाइल नहीं है। वर्तमान में आप जिस प्रोजेक्ट पर काम कर रहे हैं, उसके आकार के आधार पर, इसे खोजने के लिए निर्देशिकाओं को नेविगेट करना अप्रिय हो सकता है। यदि आप रनिंग / डिबग कॉन्फिगरेशन के लिए आगे बढ़ने से पहले एक बार फाइल चलाने (निष्पादित करने) पर क्लिक कर लेते हैं, तो यह परेशानी का कम होता है, भले ही निष्पादन परिणाम कोई भी हो।

3. अपने काम निर्देशिका, रिश्तेदार पथ, और classpath पर ध्यान दें।


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