SLF4J Cephe Arayüzü ve Logger'lar
Doğru düzeyde logging yapın
SLF4J Cephe Arayüzü ve Logger'lar, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
SLF4J Nedir?
SLF4J (Java için Basit Günlükleme Cephesi) bir soyutlamadır. Kodunuzu onun API'sine göre yazarsınız; Logback veya Log4j2 gibi bir arka uç, günlükleme işlemini gerçekten gerçekleştirir.
Bu sayede kitaplıklar, uygulamaya belirli bir gerçekleştirim dayatmadan günlükleme yapabilir.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("Application started");
}
}Günlükçü Edinme
LoggerFactory.getLogger(MyClass.class) ile her sınıf için bir günlükçü oluşturun.
Geleneksel olarak alan private static final olur ve log veya logger adı verilir. Sınıf, çıktıda görünen günlükçünün adı olur.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OrderService {
private static final Logger log = LoggerFactory.getLogger(OrderService.class);
void placeOrder(String id) {
log.info("Placing order {}", id);
}
}Beş Seviye
SLF4J günlükçüleri her seviye için bir metot sunar:
log.trace(...)log.debug(...)log.info(...)log.warn(...)log.error(...)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.trace("entering main");
log.debug("args length = {}", args.length);
log.info("service is up");
log.warn("cache miss");
log.error("failed to connect");
}
}Doğru Seviyeyi Seçme
Yönergeler:
- ERROR: Bir insanın incelemesi gereken gerçek bir başarısızlık.
- WARN: Kurtarılabilir bir anormallik.
- INFO: Önemli yaşam döngüsü olayları.
- DEBUG: Üretimde kapalı olan geliştirici tanılama bilgileri.
- TRACE: Son derece ayrıntılı izleme.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PaymentService {
private static final Logger log = LoggerFactory.getLogger(PaymentService.class);
void charge(int cents) {
if (cents <= 0) { log.warn("non-positive charge: {}", cents); return; }
log.info("charged {} cents", cents);
}
}Günlükçü Adları ve Hiyerarşi
Günlükçü adları, noktalarla ayrılmış paketlere göre hiyerarşiktir. com.example.svc adlı bir günlükçü, com.example öğesinin alt öğesidir.
Üst günlükçüdeki yapılandırma, geçersiz kılınmadığı sürece alt günlükçülere uygulanır; böylece paket başına seviyeler belirleyebilirsiniz.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
public static void main(String[] args) {
Logger a = LoggerFactory.getLogger("com.example.app");
Logger b = LoggerFactory.getLogger("com.example.app.db");
a.info("parent logger");
b.debug("child inherits parent's level unless overridden");
}
}Maliyetli Çağrıları Koruma
Maliyetli ileti oluşturma işlemlerinde, çalışmanın yalnızca seviye etkin olduğunda yürütülmesi için isDebugEnabled() ile koşul ekleyin.
Parametreli günlüklemeyle (sonraki derste) buna nadiren ihtiyaç duyarsınız; ancak dizeleri kendiniz oluştururken bu işlem gereklidir.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
static String heavyDump() { return "...large state..."; }
public static void main(String[] args) {
if (log.isDebugEnabled()) {
log.debug("state: {}", heavyDump());
}
}
}İstisnaları Günlükleme
Bir istisnayı tam yığın iziyle günlüklemek için Throwable öğesini son bağımsız değişken olarak geçirin.
İstisnayı bir yer tutucuya koymayın; iletiyi geçtikten sonra iletin.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
try {
throw new IllegalStateException("boom");
} catch (Exception e) {
log.error("Operation failed for id {}", 42, e);
}
}
}Her Sınıf İçin Bir Günlükçü
Günlükçüyü bir kez, statik final alan olarak tanımlayın. Bir metot içinde asla günlükçü oluşturmayın; bu işlem gereksiz kaynak harcar ve sınıf adının sağladığı avantajı ortadan kaldırır.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UserRepository {
// Good: one shared logger named after the class
private static final Logger log = LoggerFactory.getLogger(UserRepository.class);
void save(String user) { log.debug("saving {}", user); }
}SLF4J ve Arka Uç
SLF4J yalnızca API'dir. Çalışma zamanında sınıf yolunda bulunan arka uca bağlanır.
logback-classicekleyin: SLF4J, Logback'i kullanır.log4j-slf4j2-implekleyin: SLF4J, Log4j2'yi kullanır.
Kodunuz hiç değişmez.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
// Same code, different backend depending on classpath
log.info("backend-agnostic logging");
}
}Hassas Verileri Günlüklemekten Kaçının
Parolaları, belirteçleri veya kredi kartı numaralarının tamamını asla günlüklemeyin. Günlükler genellikle birçok sisteme gönderilir ve uzun süre saklanır.
Günlüklemeden önce hassas alanları maskeleyin veya çıkarın.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
static String mask(String card) { return "****" + card.substring(card.length() - 4); }
public static void main(String[] args) {
log.info("charged card {}", mask("4111111111111234"));
}
}Gerçekçi Bir Hizmet
Hepsini bir araya getirelim: uygun seviyelerde günlükleme yapan ve bir istisna yolu içeren küçük bir hizmet.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EmailService {
private static final Logger log = LoggerFactory.getLogger(EmailService.class);
void send(String to) {
log.debug("preparing email to {}", to);
try {
if (to == null) throw new IllegalArgumentException("null recipient");
log.info("email sent to {}", to);
} catch (Exception e) {
log.error("failed to send email", e);
}
}
}Hızlı Kontrol
SLF4J temelleri konusundaki bilginizi sınayın.
Özet
SLF4J cephesini öğrendiniz:
- Her sınıf için bir
private static final Loggeredinin. - Beş seviye metodunu uygun şekilde kullanın.
- Günlükçü adları, paket başına denetim sağlamak için hiyerarşiktir.
- Yığın izlerini günlüklemek için bir
Throwableöğesini son sırada geçirin; gizli bilgileri asla günlüklemeyin.
Sırada verimli parametreli iletiler var.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("SLF4J facade recap complete");
}
}Sıkça Sorulan Sorular
“SLF4J Cephe Arayüzü ve Logger'lar” dersi ücretsiz mi?
Evet — “SLF4J Cephe Arayüzü ve Logger'lar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“SLF4J Cephe Arayüzü ve Logger'lar” dersinde ne öğreneceğim?
Doğru düzeyde logging yapın Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“SLF4J Cephe Arayüzü ve Logger'lar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Yapılandırılmış Logging Neden Gerekli
- SLF4J Cephe Arayüzü ve Logger'lar
- Parametreli Logging
- Logback Yapılandırma