0Pricing
Java Academy · Pelajaran

Facade SLF4J dan Logger

Catat pada tingkat yang tepat.

Facade SLF4J dan Logger adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Apa Itu SLF4J?

SLF4J (Fasad Pencatatan Sederhana untuk Java) adalah sebuah abstraksi. Anda menulis kode berdasarkan antarmukanya, dan sistem pendukung seperti Logback atau Log4j2 melakukan pencatatan yang sebenarnya.

Hal ini memungkinkan pustaka melakukan pencatatan tanpa memaksakan implementasi tertentu pada aplikasi.

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

Mendapatkan Logger

Buat satu logger untuk setiap kelas dengan LoggerFactory.getLogger(MyClass.class).

Menurut konvensi, bidangnya adalah private static final dan diberi nama log atau logger. Kelas tersebut menjadi nama logger, yang muncul dalam keluaran.

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

Lima Tingkat

Logger SLF4J menyediakan satu metode untuk setiap tingkat:

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

Memilih Tingkat yang Tepat

Panduan:

  • ERROR: kegagalan nyata yang harus diperiksa oleh manusia.
  • WARN: anomali yang dapat dipulihkan.
  • INFO: peristiwa penting dalam siklus hidup.
  • DEBUG: diagnostik pengembang, nonaktif di produksi.
  • TRACE: pelacakan yang sangat rinci.
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);
    }
}

Nama Logger dan Hierarki

Nama logger bersifat hierarkis berdasarkan paket yang dipisahkan oleh titik. Logger bernama com.example.svc adalah turunan dari com.example.

Konfigurasi pada induk berlaku untuk turunannya kecuali ditimpa, sehingga Anda dapat menetapkan tingkat per paket.

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

Melindungi Pemanggilan yang Mahal

Untuk pembuatan pesan yang membutuhkan banyak biaya, gunakan isDebugEnabled() sebagai penjaga agar pekerjaan hanya dijalankan ketika tingkat tersebut aktif.

Dengan pencatatan berparameter (pelajaran berikutnya), Anda jarang memerlukan cara ini, tetapi cara ini penting ketika Anda membuat String sendiri.

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

Mencatat Pengecualian

Untuk mencatat pengecualian beserta jejak tumpukan lengkapnya, teruskan Throwable sebagai argumen terakhir.

Jangan menempatkan pengecualian di dalam penanda tempat; teruskan setelah pesan.

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

Satu Logger per Kelas

Deklarasikan logger sekali sebagai bidang statik final. Jangan pernah membuat logger di dalam metode, karena hal itu membuang pekerjaan dan menghilangkan manfaat nama kelas.

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 vs Implementasi Belakang

SLF4J hanyalah antarmuka pemrograman. Saat runtime, SLF4J terhubung ke sistem pendukung apa pun yang ada di jalur kelas.

  • Tambahkan logback-classic: SLF4J menggunakan Logback.
  • Tambahkan log4j-slf4j2-impl: SLF4J menggunakan Log4j2.

Kode Anda tidak pernah berubah.

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

Hindari Mencatat Data Sensitif

Jangan pernah mencatat kata sandi, token, atau nomor kartu kredit lengkap. Catatan sering dikirim ke banyak sistem dan disimpan dalam waktu lama.

Samarkan atau hilangkan bidang sensitif sebelum melakukan pencatatan.

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

Layanan yang Realistis

Menggabungkan semuanya: layanan kecil yang mencatat pada tingkat yang sesuai dengan jalur pengecualian.

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

Pemeriksaan Singkat

Uji dasar-dasar SLF4J Anda.

Ringkasan

Anda telah mempelajari fasad SLF4J:

  • Dapatkan satu private static final Logger untuk setiap kelas.
  • Gunakan kelima metode tingkat secara tepat.
  • Nama logger bersifat hierarkis untuk pengendalian per paket.
  • Teruskan Throwable sebagai argumen terakhir untuk mencatat jejak tumpukan; jangan pernah mencatat rahasia.

Berikutnya, pesan berparameter yang efisien.

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

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Facade SLF4J dan Logger” gratis?

Ya — teks lengkap “Facade SLF4J dan Logger” 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 “Facade SLF4J dan Logger”?

Catat pada tingkat yang tepat. 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 2 dari 4.

Berapa lama pelajaran “Facade SLF4J dan Logger” 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