Log4j2 yapılandırması - log4j2 yapılandırma dosyası bulunamadı


91

Son zamanlarda log4j2 logger'ı nasıl kullanacağımı öğrenmeye karar verdim. Gerekli jar dosyalarını indirdim, kitaplığı, xml yapılandırma dosyasını oluşturdum ve kullanmaya çalıştım. Maalesef bu ifadeyi konsolda alıyorum (Eclipse):

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

Bu benim test sınıfı kodum:

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

Ve xml yapılandırma dosyam:

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

Etiketsiz xml <Logger>, paket belirtimi ve çeşitli klasörler / paketler dizinlerinde de denedim , ancak yardımcı olmadı. Artık log4j2.xmldosyam doğrudan tutulmadaki proje klasöründe bulunuyor.


2
Doc sais, sadece üzerinde sınıf olmak zorunda. Bu mu?
Fildor

evet, kaçırdım. Aptalca soru için özür dilerim ve teşekkürler :)
Qbisiek

Yanıtlar:


139

Bu, maven vb. Olmayan basit bir tutulma java projesi mi? Bu durumda, log4j2.xmldosyayı srcsınıf yolunda bulabilmek için klasörün altına koymanız gerekecektir . Eğer maven kullanıyorsanız altına koyun src/main/resourcesveyasrc/test/resources


4
Benim kahramanım! Yapılandırma dosyası sınıf yolunda vardı (sanırım), ancak src klasöründe değildi. Onu oraya taşıdım ve şimdi çalışıyor!
Shadoninja

bir maven projesiyle nasıl yapılandırılır? (maven yolu gibi çünkü sınıf yolunun altına bir 'log4j2.xml' koyarsam çalışırım), ipuçları için teşekkürler :)
Enrique San Martín

log4j2.xml src'mde (maven'siz JavaFX Projesi) ama bulunamadı .. bu çok karmaşık mı?!?! :(
Ewoks

2
İçin gider de. sbtlog4j2.xmlsrc/main/resources
Akavall

log4j2.xml bu dosyayı bulamıyorum
Karthiga

32

Aşağıdaki çözümlerden birini seçmeniz gerekiyor:

  1. Log4j2.xml dosyasını projenizdeki kaynak dizinine koyun, böylece log4j dosyaları sınıf yolu altında bulacaktır.
  2. -Dlog4j.configurationFile = dosya: /path/to/file/log4j2.xml sistem özelliğini kullanın

1
-Dlog4j.configurationFileİhtiyacım olan şeydi çünkü üzerinde çalıştığım proje Maven tabanlı değil. Awesome
Kimchi Man

15

Log4j2'yi yaml ile yapılandırırken Apache Log4j2 Configuratoin ve Apache Log4j2 Maven belgelerini takip ediyordu. Belgelere göre, aşağıdaki maven bağımlılıkları gereklidir:

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

ve

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

Bunları eklemek bile yapılandırmayı seçmedi ve her zaman hata verdi. Yapılandırmayı hata ayıklama yöntemi ekleyerek -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACEgünlükleri görmeye yardımcı oldu. Daha sonra kaynağı Maven kullanarak indirmek zorunda kaldı ve hata ayıklama, bağlı log4j2 sınıflarının anlaşılmasına yardımcı oldu. Bunlar listelenir 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

İçin bağımlılık eşlemesi eklemek jackson-dataformat-yamlilk iki sınıfa sahip olmayacak. Bu nedenle, jackson-databindyaml yapılandırmasını çalıştırmak için bağımlılığı ekleyin :

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

Versiyonu, MVN Deposundaki versiyon öğesi Test Dependenciesbölümüne bakarak ekleyebilirsiniz . Örneğin, log4j-api'nin 2.8.1 sürümü için, bu bağlantıya bakın ve sürümü bulun .log4j-apijackson-databind

Ayrıca, sınıfların sınıf yolunda olup olmadığını kontrol etmek için aşağıdaki Java kodunu kullanabilirsiniz:

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, IDE'yi yenilemeye zorlayana kadar asla bir dosya görmez. Bu bir özellik! Yani dosyayı projenin her yerine koyabilirsiniz ve Eclipse onu tamamen yok sayacak ve bu hataları atacaktır. Eclipse proje görünümünde yenile düğmesine basın ve ardından çalışır.


0

Benim durumumda, sınıf yolumun src klasörüne ayarlanmış olmasına rağmen onu projemin bin klasörüne koymak zorunda kaldım. Neden olduğuna dair hiçbir fikrim yok ama denemeye değer.


Bu, projenin yapılandırmanızı içeren klasörün bir kaynak klasörü olduğunu algılamadığını ve bu nedenle derlemenin bir parçası olarak dosyayı otomatik olarak kopyalamadığını gösterir. Bunu daha ayrıntılı incelemenizi öneririm çünkü sonunda kaynakta bin klasörüne kopyalanmayacak bir değişiklik yapacak ve sonunda değişikliğinizin neden işe yaramadığını merak ederek yaşlarınızı harcayacaksınız.
Sarah Phillips
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.