Java Logging çerçevelerindeki belirteçler nelerdir ve bunları kullanmak için neden nedir?


110

İlk okuduğumda işaretçileri duyuyorum:

http://slf4j.org/faq.html

Logger nesnesi için mevcut yöntemleri kontrol ediyorum :

ve bulunan arayüzler:

Aldığım daha ayrıntılı bilgi:

ama yine de kafam karıştı ... Unutmayın, onları nasıl kullanacağımı değil nedenini soruyorum , bu yüzden bu şunların bir kopyası değil:

GÜNCELLEME İşaretçileri kullandığınızda, XML veya .property dosyalarında yapılandırma yapmak yerine özel Java kodu yazmanız da gerekli görünüyor ...

GÜNCELLEME 2 Gönderen http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdmin,
  "This is a serious an error requiring the admin's attention",
   new Exception("Just testing"));

İşaretleyicileri kullanmak için SLF4J tarafından sağlanan işaretleyici API'yi kullanmanız gerekir. "Özel Java kodu" ile kastettiğin bu mu?
Ceki

@Ceki Görünüşe göre sadece Logger.warn (Marker, msg) kullanmanın , filtreler için özel bir sınıf yazıp onları kaydettirene kadar size herhangi bir fayda sağlamadığı görülüyor ... logback.xml'nin düz sözdiziminin Marker ile çalışmak için özel bir yeteneği yoktur (sadece % marker ile yazdır )
gavenkoa


@Ceki Puan için teşekkürler! Markörlerin kullanılabileceği tek yer mi?
gavenkoa

1
@Ceki Artık Elasticsearch'ü kullandığımıza göre, özel etkinlikleri işaretlemenin yolu budur. Önceden tanımlanmış işaretçileri yeniden kullanım için özel bir sınıfta tutuyoruz. Yalnızca grepmetin günlüklerini kullandığınızda açık değildi .
gavenkoa

Yanıtlar:


118

Bu, " SLF4J / Logback'de Markerleri kullanmak için en iyi yöntemler " sorusuna cevabımın yeniden oluşturulmuş bir versiyonudur .

İşaretleyiciler, tek bir günlük ifadesini renklendirmek veya işaretlemek için kullanılabilir . Bu renklerle, yani keçeli kalemlerle ne yapacağınız tamamen size kalmış. Bununla birlikte, marker kullanımı için iki model yaygın görünmektedir.

  1. Tetikleme : Bazı uygulayıcılara, belirli bir işaretleyicinin varlığında bir işlem yapması talimatı verilebilir. Örneğin, SMTPAppenderbir günlüğe kaydetme olayı, NOTIFY_ADMINgünlük düzeyine bakılmaksızın işaretleyici ile işaretlendiğinde bir e-posta gönderecek şekilde yapılandırılabilir . Logback belgelerinde işaretçi tabanlı tetiklemeye bakın . Ayrıca tetikleme için günlük seviyelerini ve işaretleyicileri birleştirebilirsiniz.

  2. Filtreleme : İşaretçiler, bazı değerli günlük ifadelerinin öne çıkmasını sağlamak için çok kullanışlıdır. Örneğin, kalıcılıkla ilgili tüm günlüklerinizi (çeşitli ve çoklu sınıf dosyalarında) "DB" rengiyle renklendirebilir / işaretleyebilirsiniz. Daha sonra "DB" için filtre uygulayabilirsiniz: DB ile işaretlenmiş günlük ifadeleri dışında günlük kaydını devre dışı bırakabilirsiniz. Daha fazla bilgi için yeniden oturum açma belgelerindeki filtreler bölümüne bakın (MarkerFilter'ı arayın). İşaretçiler üzerinde filtrelemenin yalnızca geri oturum açma ile değil, aynı zamanda günlük analiz araçlarıyla da gerçekleştirilebileceğini unutmayın.

İşaretçilerin ortaya çıkmasından önce, benzer davranışa ulaşmak için, 1) özel düzeyleri kullanma 2) değiştirilmiş günlükçü adlarını kullanma seçeneğine sahiptiniz. SLF4J API şu anda özel seviyeleri desteklemiyor. Seçenek 2'ye gelince, bir veya iki kaydedicinin değiştirilmesi gerekiyorsa günlükçü adlarının son eklenmesi (veya ön eklenmesi) uygulanabilir. İlişkili konfigürasyon dosyaları yönetilemez hale geldiği için, 3 veya daha fazla kaydedicinin "alt sınıflara ayrılması" gerektiğinde yaklaşım pratik olmaz.

Tek bir işaretçi zaten çok yararlı olsa da, SLF4J'nin sonraki sürümü, yani sürüm 2.0, günlük ifadesi başına birden çok işaretleyiciye izin verecektir.


1
Ayrıca kullanılabilecek SiftingAppender discrimnator için stackoverflow.com/a/30552012/1012497
nikli
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.