SORU
23 Ocak 2012, PAZARTESİ


Program Aracılığıyla Yapılandırma Log4j Kaydediciler

İlk kez SLF4J log4j bağlama ile () kullanmaya çalışıyorum.

Farklı düzeylerde günlük ve farklı appenders mesajları bastıracak olan bir LoggerFactory tarafından döndürülen 3 farklı adlı Kaydediciler yapılandırmak istiyorum:

  • Logger 1" DailyRollingFileAppender . hata AYIKLAMA ve ekler günlükleri "FileLogger
  • Logger 2 "TracingLogger" İZLEME ve JmsAppender . bir ekler günlükleri
  • 3 Logger "ErrorLogger" HATA ve JmsAppender farklı ekler kaydeder

Ayrıca programlı olarak (XML veya log4j.properties Bir dosyayı farklı olarak Java, onları yapılandırılmış istiyorum.

Normalde, bazı önyükleme kodu Loggers bir yerde, init() bir yöntem gibi bu tanımlama olacağını düşünüyorum. Kullanmak istiyorum çünkü ancak, slf4j-log4j, kaydediciler tanımlamak ve onları sınıf için kullanılabilir hale alabileceğim konusunda kafam karıştı.

Bilmiyoruminanıyorumbu benim kod SLF4J API kullanarak bu kaydediciler var olduğunu hiç bilmeyecek çünkü SLF4J temel amaca (yüzeysel olarak) aykırı bir durum. Benim kod için ayrı bir sınıf bulur log4j Kaydediciler onları sadece SLF4J API için normal çağrıları yapar.

Ama nasıl Java'da sınıf, bu log4j Kaydediciler Yapılandır...?!

CEVAP
25 Ocak 2012, ÇARŞAMBA


/Log4j Appender kaldırmak için programlı olarak ekleyebilirsiniz:

  ConsoleAppender console = new ConsoleAppender(); //create appender
  //configure the appender
  String PATTERN = "%d [%p|%c|%C{1}] %m%n";
  console.setLayout(new PatternLayout(PATTERN)); 
  console.setThreshold(Level.FATAL);
  console.activateOptions();
  //add appender to any Logger (here is root)
  Logger.getRootLogger().addAppender(console);

  FileAppender fa = new FileAppender();
  fa.setName("FileLogger");
  fa.setFile("mylog.log");
  fa.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
  fa.setThreshold(Level.DEBUG);
  fa.setAppend(true);
  fa.activateOptions();

  //add appender to any Logger (here is root)
  Logger.getRootLogger().addAppender(fa)
  //repeat with all other desired appenders

Bir ınıt bunu yapmanı öneririm() bu her şeyden önce çalıştırılacak emin olabilirsiniz, bir yere,. Sonra kökü mevcut tüm appenders logger kaldırabilirsiniz

 Logger.getRootLogger().getLoggerRepository().resetConfiguration();

ve kendi ekleyerek başlayın. Bu iş için elbette sınıf içinde log4j gerekir.

Açıklama:
Appenders eklemek ister Logger.getLogger(...) herhangi alabilirsin. Ben sadece her şeyin altındaki diğer kategoriler diğer appenders aksi additivity bayrağı ayarlayarak yapılandırılmış sürece) aktarılan her şeyi idare edecek, çünkü kök logger aldı.

Günlüğü nasıl çalıştığını ve günlükleri hakkında daha fazla bilgi için read this manual yazılı olduğu karar olduğunu bilmek gerekir.
Kısacası:

  Logger fizz = LoggerFactory.getLogger("com.fizz")

verdiğiniz kategori için bir logger "com.". fizz
Örneğin yukarıdaki bu her şeyi ile oturum root logger konsol ve dosya appender sevk edilecektir anlamına gelir.
Eğer bir appender eklerseniz Logger.getLogger("com.") fizz.addAppender(newAppender) sonra fizz günlük diğer tarafından yürütülecek kök logger gelen appenders ve newAppender.
Yapılandırma ile Zararlılarına oluşturmanız yok, sadece sistem tüm olası kategoriler için işleyicileri sağlar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LiteralMSPaint

    LiteralMSPai

    27 EKİM 2010
  • metagamers

    metagamers

    13 Mayıs 2006
  • FusioNGamiing

    FusioNGamiin

    10 Temmuz 2007