লগ 4j2 কনফিগারেশন - কোনও লগ 4j2 কনফিগারেশন ফাইল পাওয়া যায় নি


91

ইদানীং আমি লগ 4j2 লগার কীভাবে ব্যবহার করব তা শিখতে সিদ্ধান্ত নিয়েছি। আমি প্রয়োজনীয় জার ফাইলগুলি ডাউনলোড করেছি, পাঠাগার তৈরি করেছি, এক্সএমএল সংযুক্তি ফাইল এবং এটি ব্যবহার করার চেষ্টা করেছি। দুর্ভাগ্যক্রমে আমি এই বিবৃতিটি কনসোলটিতে পেয়েছি (গ্রহণ):

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 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>ট্যাগ ছাড়াই এক্সএমএল , এবং প্যাকেজ স্পেসিফিকেশন এবং বিভিন্ন ফোল্ডার / প্যাকেজ ডিরেক্টরিতে চেষ্টা করেছি, তবে এটি কোনও ফল দেয় না। এখন আমার log4j2.xmlফাইলটি গ্রহণে সরাসরি প্রকল্প ফোল্ডারে অবস্থিত।


4
ডক sais, এটা ঠিক ক্লাসপাথ উপর হতে হবে। তাই কি?
ফিল্ডার

হ্যাঁ, আমি এটি মিস করেছি। মূঢ় প্রশ্ন এবং ধন্যবাদ জন্য দুঃখিত :)
Qbisiek

উত্তর:


139

এটি কি মাভেন ইত্যাদি ছাড়াই একটি সহজ গ্রহন জাভা প্রকল্প? যে ক্ষেত্রে আপনি করা প্রয়োজন হবে log4j2.xmlঅধীনে ফাইল srcঅর্ডার ক্লাসপাথ থেকে তা খুঁজে পেতে পাবে ফোল্ডার। নীচে রাখে আপনি ম্যাভেন ব্যবহার করেন তাহলে src/main/resourcesবাsrc/test/resources


4
আমার নায়ক! আমার ক্লাসপথে কনফিগারেশন ফাইল ছিল (আমার মনে হয়), তবে এটি এসসিআর ফোল্ডারে ছিল না। আমি এটি সেখানে স্থানান্তরিত করেছি এবং এটি এখন কাজ করছে!
শাদোনিঞ্জা

কিভাবে একটি maven প্রকল্পের সাথে কনফিগার করা হয়? (খাঁটি উপায়ের মতো কারণ আমি মনে করি যদি আমি ক্লাসপথের নীচে একটি 'log4j2.xML' রাখি তবে আমি কাজ করব), টিপসটির জন্য ধন্যবাদ :)
এনরিক সান

লগ 4j2.xML আমার এসসিআর-তে রয়েছে (জাভানএফএক্স প্রকল্পটি ম্যাভেন ছাড়া) তবে এটি পাওয়া যায় না .. এটি কি খুব জটিল?!?!? :(
ইওকস

4
জন্য sbtপাশাপাশি log4j2.xmlযায় src/main/resources
আকাওয়াল

আমি নাকিসুরে কথা এই ফাইলটি log4j2.xml এটি
Karthiga

32

আপনাকে নিম্নলিখিত সমাধানগুলির মধ্যে একটি চয়ন করতে হবে:

  1. Log4j2.xML ফাইলটিকে আপনার প্রকল্পের রিসোর্স ডিরেক্টরিতে রাখুন যাতে log4j শ্রেণীর পথে ফাইলগুলি সনাক্ত করে।
  2. সিস্টেমের সম্পত্তি ব্যবহার করুন -ডলগ 4 জে কনফিগারেশনফিল = ফাইল: /path/to/file/log4j2.xml

4
-Dlog4j.configurationFileআমার যা দরকার তা হল, যেহেতু আমি যে প্রকল্পে কাজ করছি তা মাভেন ভিত্তিক নয়। দুর্দান্ত
কিমচি ম্যান

15

ডকুমেন্টেশনগুলি অনুসরণ করছিলেন - ইয়ামেলের সাথে লগ 4j2 কনফিগার করতে অ্যাপাচি লগ 4 জ 2 কনফিগারেটাইন এবং অ্যাপাচি লগ 4j2 মাভেন । ডকুমেন্টেশন অনুসারে, নিম্নলিখিত মভেন নির্ভরতাগুলি প্রয়োজনীয়:

  <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 

কনফিগারেশন সমস্যা বেশিরভাগ পেতে।

বিস্তারিত জানার জন্য লগ 4j2 এফএকিউ দেখুন: আমি কীভাবে আমার কনফিগারেশনটি ডিবাগ করব?


3

আপনি IDE এর একটি রিফ্রেশ জোর না করা পর্যন্তগ্রহণ কখনও কোনও ফাইল দেখতে পাবে না। এটি একটি বৈশিষ্ট্য! সুতরাং আপনি ফাইলটি সমস্ত প্রকল্পে রেখে দিতে পারেন এবং Eclipse এটিকে সম্পূর্ণ উপেক্ষা করবে এবং এই ত্রুটিগুলি ফেলে দেবে। Eclipse প্রজেক্ট ভিউতে রিফ্রেশ করুন এবং তারপরে এটি কাজ করে।


0

আমার ক্ষেত্রে আমাকে এটি আমার প্রকল্পের বিন ফোল্ডারে রাখতে হয়েছিল এমনকি আমার ক্লাসপাথটি এসআরসি ফোল্ডারে সেট করা আছে। কেন জানি না, তবে এটি চেষ্টা করে দেখার মতো।


এটি পরামর্শ দেয় যে প্রকল্পটি বুঝতে পারে না যে আপনার কনফিগারযুক্ত ফোল্ডারটি একটি সংস্থান ফোল্ডার তাই এটি বিল্ডের অংশ হিসাবে স্বয়ংক্রিয়ভাবে ফাইলটি অনুলিপি করে না। আমি এটি আরও খতিয়ে দেখার পরামর্শ দিচ্ছি কারণ শেষ পর্যন্ত আপনি সেই উত্সে এমন একটি পরিবর্তন আনবেন যা বিন ফোল্ডারে অনুলিপি তৈরি করবে না এবং আপনার পরিবর্তনটি কেন কার্যকর হয়নি তা ভেবে যুগে যুগে সময় কাটাবে।
সারা ফিলিপস 15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.