0Pricing
Java Academy · Ders

Yapılandırılmış Logging Neden Gerekli

System.out.println'ın ötesi

Yapılandırılmış Logging Neden Gerekli, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. 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.

Yazdırma Yönteminin Sorunu

System.out.println hızlı bir deneme için uygundur; ancak gerçek uygulamalarda günlük kaydı aracı olarak yetersizdir.

  • Zaman damgaları, düzeyler veya iş parçacığı adları yoktur.
  • Üretimde kapatmanın bir yolu yoktur.
  • Yönlendirme olmadan yalnızca standart çıktıya yazar.
public class Main {
    public static void main(String[] args) {
        // Crude: no level, no timestamp, always on
        System.out.println("User logged in");
    }
}

Günlük Kaydı Çerçeveleri Neler Ekler

Bir günlük kaydı çerçevesi size şunları sağlar:

  • Gürültüyü filtrelemek için düzeyler (TRACE, DEBUG, INFO, WARN, ERROR).
  • Otomatik olarak eklenen zaman damgaları, iş parçacığı ve günlük kaydedici adları.
  • Dosyalara, konsola veya uzak sistemlere yönlendirme.
  • Yeniden derleme olmadan çalışma zamanında yapılandırma.
public class Main {
    public static void main(String[] args) {
        // A framework would render: time, level, logger, thread, message
        String simulated = "2026-01-01 10:00:00 INFO  c.e.App [main] - User logged in";
        System.out.println(simulated);
    }
}

Günlük Düzeylerinin Açıklaması

Düzeyler iletileri önemlerine göre sıralar:

  • TRACE: çok ayrıntılı bilgiler.
  • DEBUG: geliştirme tanılamaları.
  • INFO: olağan kilometre taşları.
  • WARN: beklenmeyen ancak kurtarılabilir bir durum.
  • ERROR: ilgilenilmesi gereken bir hata.
public class Main {
    enum Level { TRACE, DEBUG, INFO, WARN, ERROR }
    public static void main(String[] args) {
        Level threshold = Level.INFO;
        for (Level l : Level.values()) {
            boolean shown = l.ordinal() >= threshold.ordinal();
            System.out.println(l + " visible? " + shown);
        }
    }
}

Eşikle Filtreleme

Bir günlük kaydedicinin bir eşiği vardır. Eşiğin altındaki iletiler düşük maliyetle atılır.

Üretimde INFO düzeyini ayarlayarak DEBUG ve TRACE iletilerini yok sayabilir, kod değişikliği yapmadan gürültüyü ve maliyeti azaltabilirsiniz.

public class Main {
    enum Level { TRACE, DEBUG, INFO, WARN, ERROR }
    static void log(Level threshold, Level level, String msg) {
        if (level.ordinal() >= threshold.ordinal()) {
            System.out.println(level + " - " + msg);
        }
    }
    public static void main(String[] args) {
        Level t = Level.WARN;
        log(t, Level.DEBUG, "hidden detail");
        log(t, Level.ERROR, "shown error");
    }
}

Yapılandırılmış ve Yapılandırılmamış

Yapılandırılmamış günlükler düz cümlelerden oluşur. Yapılandırılmış günlükler, makinelerin ayrıştırabileceği anahtar-değer bağlamı (kullanıcı kimliği, istek kimliği) ekler.

Yapılandırılmış günlüklerde Elasticsearch veya Loki gibi araçlarla arama yapabilir ve verileri toplulaştırabilirsiniz.

import java.util.Map;

public class Main {
    public static void main(String[] args) {
        // Structured context as key-value pairs
        Map<String, Object> fields = Map.of("event", "login", "userId", 42, "ok", true);
        System.out.println(fields);
    }
}

Soyutlama Katmanı Fikri

Kodunuzu belirli bir günlük kaydı kitaplığına bağlamamalısınız. SLF4J gibi bir soyutlama katmanı, tek bir API'ye göre kod yazmanıza ve arka ucu (Logback, Log4j2) daha sonra değiştirmenize olanak tanır.

Bu, uygulamanızı günlük kaydı uygulamasına ilişkin seçimlerden bağımsızlaştırır.

public class Main {
    public static void main(String[] args) {
        // Concept: your code calls a facade interface, not a concrete logger
        System.out.println("App -> SLF4J facade -> Logback backend");
    }
}

Neden Yalnızca Bir Mantıksal Bayrak Kullanılmamalı?

Bazı kodlar if (DEBUG) System.out.println(...) kullanır. Bu, kod tabanını gereksiz koşullarla doldurur ve paket bazında denetim sağlamaz.

Bir günlük kaydı çerçevesi yapılandırmayı merkezileştirir: bir paket için DEBUG'ı, diğer her şey için ERROR'ı etkinleştirebilirsiniz.

public class Main {
    static final boolean DEBUG = false;
    public static void main(String[] args) {
        // Inflexible: one global switch, scattered checks
        if (DEBUG) System.out.println("diagnostic");
        System.out.println("A framework controls this per logger instead");
    }
}

Performansla İlgili Kaygılar

Günlük kaydı devre dışıyken düşük maliyetli olmalıdır. Çerçeveler filtrelenen düzeyler için yapılan işleri atlar ve parametreli iletiler, kullanmayacağınız dizelerin oluşturulmasını önler.

Yazdırma yöntemi, çıktıyı kimse okumasa bile bağımsız değişkenini her zaman değerlendirir.

public class Main {
    static String expensive() {
        System.out.println("(building expensive string)");
        return "big report";
    }
    public static void main(String[] args) {
        boolean debugEnabled = false;
        // Only build the message if it will actually be logged
        if (debugEnabled) System.out.println(expensive());
        System.out.println("skipped expensive work");
    }
}

Merkezi Çıktı Yönlendirme

Çerçeveler günlükleri bir veya daha fazla ekleyiciye gönderir: konsol, dönen dosyalar, sistem günlüğü veya ağ toplayıcısı.

Yönlendirmeyi bir kez yapılandırırsınız; uygulama kodu aynı kalır.

public class Main {
    public static void main(String[] args) {
        String[] appenders = {"CONSOLE", "ROLLING_FILE", "JSON_HTTP"};
        for (String a : appenders) System.out.println("route logs to: " + a);
    }
}

İlişkilendirme ve Bağlam

Gerçek sistemler, bir istekteki her günlük satırına bir istek kimliği ekler; böylece tek bir kullanıcının yolculuğunu iş parçacıkları ve hizmetler arasında izleyebilirsiniz.

SLF4J bunu MDC (Eşlenmiş Tanılama Bağlamı) aracılığıyla destekler.

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, String> mdc = new HashMap<>();
        mdc.put("requestId", "req-1234");
        System.out.println("All logs in this request tagged with " + mdc);
    }
}

Plan

Bu kurs boyunca şunları yapacaksınız:

  • SLF4J soyutlama katmanını kullanacak ve günlük kaydedicileri alacaksınız.
  • Doğru düzeyde günlük kaydı yapacaksınız.
  • Verimlilik için parametreli iletiler kullanacaksınız.
  • Ekleyiciler ve kalıplarla Logback'i yapılandıracaksınız.
public class Main {
    public static void main(String[] args) {
        System.out.println("Next: SLF4J facade and loggers");
    }
}

Hızlı Kontrol

Yapılandırılmış günlükleme konusundaki anlayışınızı sınayın.

Özet

Yapılandırılmış günlüklemenin neden önemli olduğunu öğrendiniz:

  • println seviyelerden, üst verilerden ve yönlendirmeden yoksundur.
  • Çerçeveler seviyeler, filtreleme ve ekleyiciler sağlar.
  • Bir cephe, kodu arka uçtan bağımsızlaştırır.
  • Yapılandırılmış bağlam ve MDC ilişkilendirmeyi mümkün kılar.

Sırada SLF4J cephesi ve günlükçülerin oluşturulması var.

public class Main {
    public static void main(String[] args) {
        System.out.println("Structured logging recap complete");
    }
}

Sıkça Sorulan Sorular

“Yapılandırılmış Logging Neden Gerekli” dersi ücretsiz mi?

Evet — “Yapılandırılmış Logging Neden Gerekli” 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.

“Yapılandırılmış Logging Neden Gerekli” dersinde ne öğreneceğim?

System.out.println'ın ötesi 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 1. dersidir.

“Yapılandırılmış Logging Neden Gerekli” 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

  1. Yapılandırılmış Logging Neden Gerekli
  2. SLF4J Cephe Arayüzü ve Logger'lar
  3. Parametreli Logging
  4. Logback Yapılandırma
← Java Academy Sayfasına Dön