Log4j2 कॉन्फ़िगरेशन - कोई log4j2 कॉन्फ़िगरेशन फ़ाइल नहीं मिली


91

हाल ही में मैंने log4j2 लकड़हारे का उपयोग करने का तरीका जानने का फैसला किया। मैंने आवश्यक jar फाइलें डाउनलोड कीं, लाइब्रेरी बनाई, xml comfiguration फाइल बनाई और इसका उपयोग करने की कोशिश की। दुर्भाग्य से मुझे यह कथन सांत्वना (ग्रहण) में मिला है:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration:       logging only errors to the console.

यह मेरा परीक्षण वर्ग कोड है:

package log4j.test;

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

public class Log4jTest
{
    static final Logger logger = LogManager.getLogger(Logger.class.getName());

    public static void main(String[] args) {    
        logger.trace("trace");
        logger.debug("debug");
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
        logger.fatal("fatal");
    }
}

और मेरी xml विन्यास फाइल:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test" 
               status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="log4j.test.Log4jTest" level="trace">
            <AppenderRef ref="Console"/>
        </Logger>
        <Root level="trace">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

मैंने <Logger>टैग के बिना xml के साथ भी कोशिश की , और पैकेज विनिर्देश और विभिन्न फ़ोल्डर्स / पैकेज निर्देशिकाओं में, लेकिन यह मदद नहीं की। अब मेरी log4j2.xmlफ़ाइल सीधे ग्रहण में प्रोजेक्ट फ़ोल्डर में स्थित है।


2
डॉक sais, यह सिर्फ classpath पर हो गया है। क्या यह?
फेल्डर

हाँ, मैं इसे याद किया। मूर्खतापूर्ण प्रश्न के लिए क्षमा करें और धन्यवाद :)
Qbisiek

जवाबों:


139

क्या यह मावेन आदि के बिना एक सरल ग्रहण जावा परियोजना है? उस स्थिति में आपको log4j2.xmlफ़ाइल को srcफ़ोल्डर में रखने की आवश्यकता होगी ताकि उसे क्लासपाथ पर खोजने में सक्षम हो। यदि आप मावेन का उपयोग करते हैं, तो इसे नीचे रखें src/main/resourcesयाsrc/test/resources


4
मेरे हीरो! मेरे पास क्लासपाथ (मुझे लगता है) में कॉन्फ़िगरेशन फ़ाइल थी, लेकिन यह src फ़ोल्डर में नहीं थी। मैंने इसे वहां स्थानांतरित कर दिया और यह अब काम कर रहा है!
Shadoninja

एक मावेन परियोजना के साथ विन्यास कैसे किया जाता है? (मावेन की तरह, क्योंकि मुझे लगता है कि अगर मैं क्लासपैथ के तहत एक 'log4j2.xml' डालूंगा तो काम करूंगा), सुझावों के लिए धन्यवाद :)
एनरिक सैन मार्टिन

log4j2.xml मेरे src (JavaFX प्रोजेक्ट बिना मावेन के) में है, लेकिन यह नहीं मिला है .. क्या यह सू जटिल है?!? :(
इवोक

2
के रूप में अच्छी तरह sbtसे log4j2.xmlचला जाता है src/main/resources
अकवाल

मैं इस फाइल log4j2.xml
Karthiga

32

आपको निम्न में से किसी एक समाधान को चुनने की आवश्यकता है:

  1. Log4j2.xml फ़ाइल को अपनी परियोजना में संसाधन निर्देशिका में रखें ताकि log4j वर्ग पथ के तहत फ़ाइलों का पता लगाएगा।
  2. सिस्टम प्रॉपर्टी का उपयोग करें -Dlog4j.configurationFile = फ़ाइल: /path/to/file/log4j2.xml

1
-Dlog4j.configurationFileमुझे जिस चीज की जरूरत है, मैं जिस प्रोजेक्ट पर काम कर रहा हूं, वह मावेन आधारित नहीं है। बहुत बढ़िया
किम्ची मैन

15

दस्तावेज़ों का पालन कर रहा था - Apache Log4j2 विन्यास और Apache Log4j2 यावन के साथ log4j2 को कॉन्फ़िगर करने में मावेन । प्रलेखन के अनुसार, निम्नलिखित मावेन निर्भरता की आवश्यकता है:

  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.1</version>
  </dependency>

तथा

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
    <version>2.8.6</version>
</dependency>

बस इन्हें जोड़ने से कॉन्फ़िगरेशन नहीं चुना गया और हमेशा त्रुटि दी गई। लॉग को देखने में मदद करके कॉन्फ़िगरेशन को डीबग करना का तरीका -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE। बाद में मावेन का उपयोग करके स्रोत को डाउनलोड करना पड़ा और डीबगिंग ने लॉग 4j2 की निर्भर कक्षाओं को समझने में मदद की। वे में सूचीबद्ध हैं org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory:

com.fasterxml.jackson.databind.ObjectMapper
com.fasterxml.jackson.databind.JsonNode
com.fasterxml.jackson.core.JsonParser
com.fasterxml.jackson.dataformat.yaml.YAMLFactory

निर्भरता मानचित्रण जोड़ने के jackson-dataformat-yamlलिए पहले दो वर्ग नहीं होंगे। इसलिए, jackson-databindयम कॉन्फ़िगरेशन प्राप्त करने के लिए निर्भरता को काम में जोड़ें:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.6</version>
</dependency>

आप एमवीएन रिपॉजिटरी से संस्करण आइटम के Test Dependenciesअनुभाग का संदर्भ देकर संस्करण जोड़ सकते हैं । Log4j-api के 2.8.1 संस्करण के लिए, इस लिंक को देखें और संस्करण का पता लगाएं ।log4j-apijackson-databind

इसके अलावा, आप वर्ग कोड में उपलब्ध हैं या नहीं, यह जांचने के लिए आप नीचे दिए गए जावा कोड का उपयोग कर सकते हैं:

System.out.println(ClassLoader.getSystemResource("log4j2.yml")); //Check if file is available in CP
ClassLoader cl = Thread.currentThread().getContextClassLoader(); //Code as in log4j2 API. Version: 2.8.1
 String [] classes = {"com.fasterxml.jackson.databind.ObjectMapper",
 "com.fasterxml.jackson.databind.JsonNode",
 "com.fasterxml.jackson.core.JsonParser",
 "com.fasterxml.jackson.dataformat.yaml.YAMLFactory"};

 for(String className : classes) {
     cl.loadClass(className);
 }

4

इसके अलावा टॉमसज़ डब्ल्यू ने क्या लिखा, अपने आवेदन को शुरू करके आप सेटिंग्स का उपयोग कर सकते हैं:

-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE 

अधिकांश कॉन्फ़िगरेशन समस्याओं को प्राप्त करने के लिए।

विवरण के लिए Log4j2 FAQ देखें: मैं अपने कॉन्फ़िगरेशन को कैसे डीबग करूं?


3

जब तक आप IDE को ताज़ा नहीं करते तब तक ग्रहण को कोई फ़ाइल दिखाई नहीं देगी। इसकी एक विशेषता है! तो आप फ़ाइल को पूरी परियोजना में रख सकते हैं और ग्रहण इसे पूरी तरह से अनदेखा कर देगा और इन त्रुटियों को फेंक देगा। एक्लिप्स प्रोजेक्ट दृश्य में ताज़ा हिट करें और फिर यह काम करता है।


0

मेरे मामले में मुझे इसे अपनी परियोजना के बिन फ़ोल्डर में रखना पड़ा, यहां तक ​​कि इस तथ्य से भी कि मेरा वर्गपथ src फ़ोल्डर में सेट है। मुझे पता नहीं क्यों, लेकिन यह एक कोशिश के काबिल है।


इससे पता चलता है कि परियोजना यह नहीं पहचानती है कि आपके कॉन्फ़िगरेशन वाला फ़ोल्डर एक संसाधन फ़ोल्डर है इसलिए यह फ़ाइल को बिल्ड के भाग के रूप में स्वचालित रूप से कॉपी नहीं करता है। मैं आगे इस पर गौर करने का सुझाव दूंगा क्योंकि आखिरकार आप उस स्रोत में बदलाव करेंगे जो बिन फ़ोल्डर में कॉपी नहीं किया जाएगा और यह सोचकर खर्च करने की उम्र खत्म हो जाएगी कि आपका बदलाव क्यों नहीं हुआ।
सारा फिलिप्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.