2012-11-05 20 views
23

'u yapılandırmak için bir XML Dosyası (log4j2.xml) kullanma Yeni Log4J 2 - Java Günlüğü Çerçevesini kullanmak istiyorum. Her şey iyi çalışıyor, ancak günlüğe kaydetmeyi (günlük düzeyi gibi) yapılandırmak için özel bir yapılandırma dosyası yüklemek için bir saatten beri denedim.Log4j 2

Bu benim log4j2.xml geçerli:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="OFF"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 
    </appenders> 
    <loggers> 
    <root level="error"> 
     <appender-ref ref="Console"/> 
    </root> 
    </loggers> 
</configuration> 

ben aşağıdakileri denedim, ama hiçbir çalışır: varsayılan paketinde yer alır, böylece

  • log4j2.xml dosyasını taşıyın.
  • , projenizde bir klasör oluşturun orada log4j2.xml dosyasını yerleştirin "log4j.xml" olarak projede her yerde
  • Adı log4j2.xml dosyasını log4j2.xml dosyasını getirin ve o klasör eklemek
  • çalışma zamanı sınıfyolunuz

official website bana yardımcı olamadığından, umarım Log4j 2 yapılandırma dosyam ile çalışmama yardımcı olabilirsiniz.

+1

Eğer yorum yaparak cevabım bazı görüş sağlayan misin? HATA'dan başka düzeyler için hala günlük iletileri görmüyor muydunuz? – Andrey

cevap

30

Önemli: log4j.xml

Benim tahmin aksine hiçbir şey hata seviyesini kullanarak kaydedilir çünkü hiçbir şey olmuyormuş olan (döneminden önce 2 unutmayın) yapılandırma dosyasının adı log4j2.xml olduğundan emin olun. Öyle gibi başka logger eklemeyi deneyebilirsiniz:

<logger name="com.foo.Bar" level="trace"> 
    <appender-ref ref="Console"/> 
</logger> 

iyi bir kaynak olabilir Configuration bölümünde benziyor

.

<root level="error"> 
    <appender-ref ref="Console"/> 
</root> 

Bu yalnızca mesajlar günlüğünde görünür Level.ERROR kullanılarak kaydedilir anlamına gelir:

Eğer "hata" olarak ayarlanmış seviyesine sahip bir logger belirterek ediyoruz, başka ayrıntı için. Daha az kısıtlayıcı bir seviyeye sahip bir kayıt cihazı eklemek, kayıtta daha fazla mesajın görünmesine izin verecektir. Kılavuzun Architecture bölümüne bakmanızı öneririz (eğer sayfayı aşağı kaydırırsanız, kayıt seviyelerini açıklayan tabloyu göreceksiniz). Alternatif olarak, sadece, belirttiğiniz yapılandırma Verilen

kod yürütme (yerine yeni bir kayıt cihazı ekleyerek) izlemek için kök kaydedicisi düzeyini değiştirebilecek aşağıda 13:27:50.244 [main] ERROR com.example.Log4j2Tester - testing ERROR level

package com.example; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 

public class Log4j2Tester { 
    private static final Logger LOG = LogManager.getLogger(Log4j2Tester.class); 

    public static void main(String[] args) { 
     LOG.error("testing ERROR level"); 

//if you change the level of root logger to 'trace' 
//then you'll also see something like 
// 13:27:50.244 [main] TRACE com.example.Log4j2Tester - exiting application 
     LOG.trace("exiting application"); 
    } 
} 
+0

Everthing şimdi çalışıyor. Detaylı cevabınız için teşekkürler :) – Rubberducker

+0

@FentonCrackshell: Yardım etmekten memnunum! – Andrey

+0

Nihayet 'log4j2.xml' koymak nasıl? –

-4

gibi bir şey koyun verir Projenin kök klasöründe yer alan LOG4J2.XML, src/main.

+1

/bin doğru – Blub

1

Benim 2 sent:

Yazılım sistemi: log4j 2, NetBeans ve TestNG.

Aynı sorun vardı, ancak test ortamı ile.

Varsayılan olarak, (src /) dosyasında bulunan log4j2.xml dosyasında günlük kaydı seviyesi hata olarak ayarlanmıştır. Ama testleri yaparken, kayıtların izini sürmek istiyorum. Ve tabiki biraz daha fazla veya daha az kodlanmış dosyaya da giriş yapmış.

olduğunu Yani, başlangıçta benim yaptığım gibi bir şey:

public class someTestClass { 
     static final Logger log=LogManager.getLogger("test.someTestClass"); 
...... 
@Test 
public void SomeMethod(){ 

System.setProperty("log4j.configurationFile", "resources/log4j2_conf.xml"); 

log.trace("This will not show because the default logging level is ERROR 
and the resources/log4j2_conf.xml is not loaded"); 

} 

sorun System.setProperty Komut çalışacaktır zaman, log4j zaten (ayarlanacak edilecek olmasıdır Yani, statik kesindir Kaydedici günlüğü = ... ilk yürütülecektir)

Yaptıklarımı

böyle @BeforeClass kullanmaktır.

BTW
public class someTestClass { 
    Logger log;  
    @BeforeClass 
    public void setLogger(){ 
     SetEnv.SetEnvironment(); 
     log = LogManager.getLogger("TestRealClientRealServer"); 
    } 
...... 
    @Test 
    public void SomeMethod(){ 

     log.trace("This will show, because in log4j2_conf.xml 
the root level is set to TRACE"); 

    } 
} 

, kaynaklar/test paketleri yerleştirilebilir size böylece d "test" log4j kurulumunu göndermez.

sınıf yolu kök klasöründe varsayılan yapılandırma dosyasını, log4j2.xml (veya log4j2-test.xml) kullanmak için yanında o

1

yardımcı Hope, senin (yapılandırma dosya yolunu belirtmek için bu sistem özelliğini kullanabilirsiniz tutulma kullanıcıları için java komut satırında -D)

log4j.configurationFile='xxxx/xxx/xxx' 
0

bir ipucu kullanın:

sağ projede tıklayın ve "yenileme" a tıklayın. Tutulmada log4j2.xml dosyasını görebildiğinizden emin olun. Burada

Tam cevap: log4j 2 - configuration issue

2

İPUCU: özel log4j dosyaları kullanın. (Oldukça varsayılan "log4j2.xml" thingie). Bazı durumlarda birden çok yapılandırmaya sahip olmak yararlı olabilir. Sadece herhangi bir maven kullanarak ve log4j2 yapılandırmak istiyorsanız durumunda

, Burada pom.xml'Bu gerekenler: Varsayılan olarak

   <systemProperties> 
        <property> 
         <name>/log4j.configuration</name> 
         <value>.../../Foo-log4j.xml</value> 
        </property> 
       </systemProperties> 

, "log4j2.xml" beklenen dosya adıdır. Ancak, log4j.configuration sistem özelliğini ayarlayarak bunu geçersiz kılabiliriz. Yukarıdaki örnekte, özel yapılandırma dosyasını "Foo-log4j.xml" olarak kullanmıştım.

Sen CLI üzerinden aynı şeyi yapabilirsiniz:

-Dlog4j.configuration="Foo-log4j.xml" 
+0

Merhaba, bu konuda biraz daha fazla bilgiye ihtiyacım var, önerilen yapılandırmayı ekledim ama hala çalışmıyor –

+0

Sorun nedir? –