Konfigurasi log4j2 - Tidak ditemukan file konfigurasi log4j2


91

Akhir-akhir ini saya memutuskan untuk mempelajari cara menggunakan logger log4j2. Saya mengunduh file jar yang diperlukan, membuat perpustakaan, file konfigurasi xml dan mencoba menggunakannya. Sayangnya saya mendapatkan pernyataan ini di konsol (Eclipse):

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

Ini adalah kode kelas pengujian saya:

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");
    }
}

Dan file konfigurasi xml saya:

<?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>

Saya juga mencoba dengan xml tanpa <Logger>tag, dan spesifikasi paket dan di berbagai folder / direktori paket, tetapi tidak membantu. Sekarang log4j2.xmlfile saya terletak langsung di folder proyek di eclipse.


2
The doc sais, itu hanya untuk berada di classpath. Apakah itu?
Fildor

ya, saya melewatkannya. Maaf atas pertanyaan bodoh dan terima kasih :)
Qbisiek

Jawaban:


139

Apakah ini proyek java eclipse sederhana tanpa maven dll? Dalam hal ini, Anda perlu meletakkan log4j2.xmlfile di bawah srcfolder agar dapat menemukannya di classpath. Jika Anda menggunakan maven, letakkan di bawah src/main/resourcesatausrc/test/resources


4
Pahlawanku! Saya memiliki file konfigurasi di classpath (menurut saya), tetapi tidak ada di folder src. Saya memindahkannya ke sana dan berfungsi sekarang!
Shadoninja

bagaimana cara mengkonfigurasi dengan proyek maven? (seperti cara maven karena saya kira jika saya meletakkan 'log4j2.xml' di bawah classpath saya akan bekerja), terima kasih atas tipnya :)
Enrique San Martín

log4j2.xml ada di src saya (Proyek JavaFX tanpa maven) tetapi tidak ditemukan .. apakah ini sangat rumit?!?! :(
Ewoks

2
Untuk sbtitu log4j2.xmlmasuk ke src/main/resourcesjuga.
Akavall

saya tidak dapat menemukan file ini log4j2.xml
Karthiga

32

Anda harus memilih salah satu solusi berikut:

  1. Letakkan file log4j2.xml di direktori sumber daya dalam proyek Anda sehingga log4j akan menemukan file di bawah jalur kelas.
  2. Gunakan properti sistem -Dlog4j.configurationFile = file: /path/to/file/log4j2.xml

1
-Dlog4j.configurationFileadalah yang saya butuhkan, karena proyek yang saya kerjakan tidak berbasis Maven. Luar biasa
Kimchi Man

15

Mengikuti dokumentasi - Apache Log4j2 Configuratoin dan Apache Log4j2 Maven dalam mengkonfigurasi log4j2 dengan yaml. Sesuai dokumentasi, dependensi maven berikut diperlukan:

  <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>

dan

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

Hanya menambahkan ini tidak memilih konfigurasi dan selalu memberikan kesalahan. Cara konfigurasi debugging dengan menambahkan bantuan -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACEdalam melihat log. Nanti harus mengunduh sumber menggunakan Maven dan debugging membantu dalam memahami kelas-kelas yang bergantung dari log4j2. Mereka terdaftar di 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

Menambahkan pemetaan ketergantungan untuk jackson-dataformat-yamltidak akan memiliki dua kelas pertama. Karenanya, tambahkan jackson-databinddependensi agar konfigurasi yaml berfungsi:

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

Anda dapat menambahkan versi dengan merujuk ke Test Dependenciesbagian log4j-apiitem versi dari MVN Repository . Misalnya untuk versi 2.8.1 dari log4j-api, lihat tautan ini dan cari jackson-databindversinya.

Selain itu, Anda dapat menggunakan kode Java di bawah ini untuk memeriksa apakah kelas tersedia di classpath:

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);
 }


3

Eclipse tidak akan pernah melihat file sampai Anda memaksa refresh IDE. Ini fitur! Jadi Anda dapat meletakkan file di seluruh proyek dan Eclipse akan mengabaikannya sepenuhnya dan membuang kesalahan ini. Tekan segarkan dalam tampilan proyek Eclipse dan kemudian berfungsi.


0

Dalam kasus saya, saya harus meletakkannya di folder bin proyek saya bahkan fakta bahwa classpath saya diatur ke folder src. Saya tidak tahu mengapa, tetapi patut dicoba.


Ini menunjukkan bahwa proyek tidak mengenali bahwa folder yang berisi konfigurasi Anda adalah folder sumber daya sehingga tidak menyalin file secara otomatis sebagai bagian dari build. Saya menyarankan untuk melihat ini lebih jauh karena pada akhirnya Anda akan membuat perubahan pada sumber yang tidak akan disalin ke folder bin dan akhirnya menghabiskan waktu lama bertanya-tanya mengapa perubahan Anda tidak berhasil.
Sarah Phillips
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.