2011-10-19 20 views
11
sorun bir Log4j PatternLayout

birisi bana bir örnek verebilir misiniz nerede o iki farklı olurdu?

Bu kategori her zaman sınıf adıyla uyuşmuyor mu?

Selamlar,

cevap

17

Size belgeler önerdiği popüler şekilde logger başlatmak eğer aynı olması ve X sınıf içinde kullanacağız:

Logger logger = Logger.getLogger(com.foo.X.class); 

o zaman alırsınız %c ve %C için aynıdır, çünkü logger adı ("com.foo.X.class.getName()" tarafından oluşturulan), kayıt deyiminin verildiği sınıf adıyla eşleşir.

"bir şey"

Logger logger = Logger.getLogger("something"); 

arşivleyiciyi ara ve %c için "bir şey" ve %C için sınıf adını gerekecek.

Not: %C,'dan farklı olarak, geniş bir performans etkisi taşıdığından log4j tarafından log4j tarafından hesaplanır. Bunu doğrulamak için ilginç bir deney yapabileceğiniz:

package com.foo; 

class A { 
    private Logger = Logger.getLogger(B.class); 
    // ... 
    logger.log("inside A class"); 
} 
B varsayarak desen [%c][%m] için çıktı olacaktır paketin com.foo içindedir

:

[com.foo.B][inside A class] 

bakılmaksızın B yerinin desen [%C][%m] için çıkış olacak yapmak için:

[com.foo.A][inside A class]