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.

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

Tomasz W
sumber
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
Abdulghaffar Al-Labadi
sumber
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);
 }
James Jithin
sumber
4

Selain apa yang ditulis Tomasz W, dengan memulai aplikasi Anda, Anda dapat menggunakan pengaturan:

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

untuk mengatasi sebagian besar masalah konfigurasi.

Untuk detailnya, lihat Log4j2 FAQ: Bagaimana cara men-debug konfigurasi saya?

Seweryn Habdank-Wojewódzki
sumber
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.

Mike Ashby
sumber
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.

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