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.xml
file saya terletak langsung di folder proyek di eclipse.
Jawaban:
Apakah ini proyek java eclipse sederhana tanpa maven dll? Dalam hal ini, Anda perlu meletakkan
log4j2.xml
file di bawahsrc
folder agar dapat menemukannya di classpath. Jika Anda menggunakan maven, letakkan di bawahsrc/main/resources
atausrc/test/resources
sumber
sbt
itulog4j2.xml
masuk kesrc/main/resources
juga.Anda harus memilih salah satu solusi berikut:
sumber
-Dlog4j.configurationFile
adalah yang saya butuhkan, karena proyek yang saya kerjakan tidak berbasis Maven. Luar biasaMengikuti 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=TRACE
dalam melihat log. Nanti harus mengunduh sumber menggunakan Maven dan debugging membantu dalam memahami kelas-kelas yang bergantung dari log4j2. Mereka terdaftar diorg.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory
:Menambahkan pemetaan ketergantungan untuk
jackson-dataformat-yaml
tidak akan memiliki dua kelas pertama. Karenanya, tambahkanjackson-databind
dependensi 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 Dependencies
bagianlog4j-api
item versi dari MVN Repository . Misalnya untuk versi 2.8.1 dari log4j-api, lihat tautan ini dan carijackson-databind
versinya.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); }
sumber
Selain apa yang ditulis Tomasz W, dengan memulai aplikasi Anda, Anda dapat menggunakan pengaturan:
untuk mengatasi sebagian besar masalah konfigurasi.
Untuk detailnya, lihat Log4j2 FAQ: Bagaimana cara men-debug konfigurasi saya?
sumber
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.
sumber
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.
sumber