2013-05-24 24 views
5

Bu soruyu birçok kez soruluyor gibi görünüyor. Ama denediğim tüm çözümler (çoğunlukla log4j.properties dosyasının doğru yerde olduğundan ve doğru yazıldığından emin olun) benim durumumda çalışmaz.log4j: WARN Kaydedici için hiçbir ek bulunamadı - slf4j-log4j12 kullanılıyor

Bir maven projem var. Testlerim için log4j'yi kullanmak istiyorum. Test sınıfı, logger'ın kullanıldığı src/main/java'da tanımlanan bir yardımcı metodu kullanır. benim yardımcı sınıfta

(src/main/java /) Ben

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

ithal ettik ve ben hem src/ana logger

private static final String TAG = Helper.class.getSimpleName(); 
private static final Logger logger = LoggerFactory.getLogger(TAG); 

ben dahil ettik örneği var/kaynakları ve src/test/kaynaklar aşağıdaki log4j.properties benim POM olarak

### set log levels - for more verbose logging change 'info' to 'debug' ### 
### Also add logfile to the root, if need stdout then add stdout appender here### 
log4j.rootLogger=debug, stdout 

### direct log messages to stdout ### 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{dd-mm HH:mm:ss,SSS} %p/%c{1}:%L - %m%n 

dosyası Ben slf4j bağımlılığı yer verdik benim yardımcı sınıfında kodunda
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
</dependency> 

Ben

logger.debug("logger test..."); 

Mesaj yok konsolda yazdırılır bu şekilde kayıt kullanımı ve aşağıdaki uyarı mesaj almak

log4j:WARN No appenders could be found for logger (Helper). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

neler ben özlüyorum

Güncelleme

konu log4j-Test.xml için log4j.configuration özelliğini ayarlayan bir proje seçeneği ilgiliydi. Ben proje maven pom projeye aşağıdaki eklentiyi ekledim ve bu sorunu giderdi.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.14.1</version> 
    <configuration> 
     <systemPropertyVariables> 
     <log4j.configuration>log4j.properties</log4j.configuration> 
     </systemPropertyVariables> 
    </configuration> 
    </plugin> 
+4

Ekleme '-Dlog4j.debug' log4j hangi yapılandırma dosyasını tam olarak görebildiğini görmek için JVM argümanlarına –

cevap

5

Gönderdiğiniz bölümlerden, düzgün görünüyor. O zaman sorunu araştıralım. Aşağıdaki

  1. temizlemek Oluşturulan kod
    mvn temiz
    Ben basit bir proje (bir JUnit test Yardımcısı yöntemini çağırmak için: logger'inizi deyimi aramak için bir yöntem vardır, AppTest sadece 2 sınıflar Yardımcısı) yaptığı dosyalar
    ./src/main/java/sub/optimal/mavenexample/Helper.java
    ./src/main/resources/log4j.properties
    ./src/test/java/sub/optimal/ var mavenexample/AppTest.java
    ./src/test /resources/log4j.properties


  2. Aşağıdaki dosyalar
    ./src/main/java/sub/optimal/mavenexample/Helper.java
    ./src/main var
    mvn derlemek kod derlemek /resources/log4j.properties
    ./src/test/java/sub/optimal/mavenexample/AppTest.java
    ./src/test/resources/log4j.özellikleri dosyaları hedef dizine kopyalanan değilse özellikler
    ./target/classes/log4j.properties
    ./target/classes/sub/optimal/mavenexample/Helper.class

    bulmaya ihtiyaç nedeni

  3. başlangıç ​​için bazı noktalar,

    mvn -debug derlemek
    mvn -Dlog4j.debug testi
+0

Hi SubOptimal, Log4j.properties doğru şekilde hedef/sınıf dizinine kopyalanır. Ancak, mvn -Dlog4j.debug test komutunu çalıştırdığımda aşağıdaki çıktıyı alırım: log4j: İçerik sınıf yükleyicisi [email protected] kullanarak [log4j-test.xml] bulmaya çalışıyorum. log4j: [email protected] sınıf yükleyicisi kullanarak [log4j-test.xml] dosyasını bulmaya çalışıyorum. log4j: ClassLoader.getSystemResource() kullanarak [log4j-test.xml] bulmaya çalışıyorum. log4j: Kaynak bulunamadı: [log4j-test.xml]. .properties dosyasını aramıyor gibi görünüyor. Neden varsayılan bir log4j yapılandırma dosyası adı değil log4j-test.xml için göründüğü gibi neden – Piero

+1

Merhaba Piero anlamıyorum, bir yere yapılandırılmalıdır. Muhtemelen konfigürasyonunuzda '-Dlog4j.configuration = log4j-test.xml' seçeneği var veya sistem özelliği programsal olarak ayarlanmış. Bir göz atın. – SubOptimal

+0

Merhaba SubOptimal. Evet, hala neden ve bu yapılandırma değişkeninin nerede ayarlandığını bilmiyorum. Ama bunu düzeltmenin bir yolunu buldum. Güncellemeye bakın. Log4j hata ayıklama çıktısının nasıl gösterileceğine dair ipucu için teşekkürler. – Piero

0

deneyin thes çıktısını kontrol e Komutları ...

$ unset FLUME_HOME Sonra

ve deneyin ..... Benim için çalıştı

....

İlgili konular