0Pricing
Java Academy · Pelajaran

Mengapa Logging Terstruktur

Lebih dari sekadar System.out.println.

Mengapa Logging Terstruktur adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Masalah dengan println

System.out.println cocok untuk eksperimen singkat, tetapi merupakan alat pencatatan yang buruk untuk aplikasi nyata.

  • Tidak ada stempel waktu, tingkatan, atau nama utas.
  • Tidak ada cara untuk menonaktifkannya dalam produksi.
  • Hanya menulis ke keluaran standar, tanpa perutean.
public class Main {
    public static void main(String[] args) {
        // Crude: no level, no timestamp, always on
        System.out.println("User logged in");
    }
}

Tambahan dari Kerangka Kerja Pencatatan

Kerangka kerja pencatatan memberi Anda:

  • Tingkatan (TRACE, DEBUG, INFO, WARN, ERROR) untuk menyaring gangguan.
  • Stempel waktu, utas, dan nama pencatat secara otomatis.
  • Perutean ke file, konsol, atau sistem jarak jauh.
  • Konfigurasi saat berjalan tanpa mengompilasi ulang.
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);
    }
}

Penjelasan Tingkatan Catatan

Tingkatan mengurutkan pesan berdasarkan kepentingannya:

  • TRACE: detail yang sangat rinci.
  • DEBUG: diagnostik pengembangan.
  • INFO: pencapaian normal.
  • WARN: sesuatu yang tidak terduga tetapi dapat dipulihkan.
  • ERROR: kegagalan yang memerlukan perhatian.
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);
        }
    }
}

Penyaringan Berdasarkan Ambang Batas

Pencatat memiliki ambang batas. Pesan di bawah ambang batas dibuang dengan biaya minimal.

Dalam produksi, Anda dapat menetapkan INFO sehingga DEBUG dan TRACE menghilang, mengurangi gangguan dan biaya tanpa mengubah kode.

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");
    }
}

Terstruktur vs Tidak Terstruktur

Catatan tidak terstruktur berupa kalimat biasa. Catatan terstruktur melampirkan konteks kunci-nilai (id pengguna, id permintaan) yang dapat diurai oleh mesin.

Catatan terstruktur dapat ditelusuri dan diagregasi dalam alat seperti Elasticsearch atau Loki.

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);
    }
}

Gagasan Fasad

Anda sebaiknya tidak mengikat kode pada pustaka pencatatan tertentu. Fasad seperti SLF4J memungkinkan Anda menulis kode menggunakan satu antarmuka dan mengganti implementasi dasar (Logback, Log4j2) nanti.

Hal ini memisahkan aplikasi Anda dari pilihan implementasi pencatatan.

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");
    }
}

Mengapa Tidak Menggunakan Penanda Boolean Saja?

Sebagian kode menggunakan if (DEBUG) System.out.println(...). Cara ini memenuhi basis kode dengan pemeriksaan dan tidak menyediakan kendali per paket.

Kerangka kerja pencatatan memusatkan konfigurasi: aktifkan DEBUG untuk satu paket dan ERROR untuk semua paket lainnya.

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");
    }
}

Pertimbangan Kinerja

Pencatatan seharusnya murah saat dinonaktifkan. Kerangka kerja melewati pekerjaan untuk tingkatan yang disaring, dan pesan berparameter menghindari pembuatan teks yang nantinya akan dibuang.

println selalu mengevaluasi argumennya, meskipun tidak ada yang membaca keluarannya.

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");
    }
}

Perutean Keluaran Terpusat

Kerangka kerja mengirimkan catatan ke satu atau beberapa penulis tambahan: konsol, file bergulir, syslog, atau pengumpul jaringan.

Anda mengonfigurasi perutean sekali; kode aplikasi tetap sama.

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);
    }
}

Korelasi dan Konteks

Sistem nyata menambahkan id permintaan ke setiap baris catatan dalam suatu permintaan, sehingga Anda dapat melacak perjalanan satu pengguna di berbagai utas dan layanan.

SLF4J mendukungnya melalui MDC (Mapped Diagnostic Context).

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);
    }
}

Rencana

Dalam kursus ini Anda akan:

  • Menggunakan fasad SLF4J dan mendapatkan pencatat.
  • Mencatat pada tingkat yang tepat.
  • Menggunakan pesan berparameter demi efisiensi.
  • Mengonfigurasi Logback dengan penulis tambahan dan pola.
public class Main {
    public static void main(String[] args) {
        System.out.println("Next: SLF4J facade and loggers");
    }
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang pencatatan terstruktur.

Ringkasan

Anda telah mempelajari alasan pentingnya pencatatan terstruktur:

  • println tidak memiliki tingkat, metadata, dan perutean.
  • Kerangka kerja menambahkan tingkat, penyaringan, dan penyalur.
  • Sebuah fasad memisahkan kode dari sistem pendukung.
  • Konteks terstruktur dan MDC memungkinkan korelasi.

Berikutnya, fasad SLF4J dan pembuatan logger.

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

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengapa Logging Terstruktur” gratis?

Ya — teks lengkap “Mengapa Logging Terstruktur” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengapa Logging Terstruktur”?

Lebih dari sekadar System.out.println. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Mengapa Logging Terstruktur” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Logging Terstruktur
  2. Facade SLF4J dan Logger
  3. Logging Berparameter
  4. Mengonfigurasi Logback
← Kembali ke Java Academy