1.1 Pengantar log

Log adalah daftar peristiwa yang telah terjadi. Hampir seperti jurnal atau buku harian bahari. Nah, karenanya, logger adalah objek yang dapat Anda gunakan untuk login. Dalam pemrograman, merupakan kebiasaan untuk mencatat hampir semua hal. Dan di Jawa semuanya seperti itu dan bahkan lebih sedikit lagi.

logger java

Faktanya adalah program Java seringkali merupakan aplikasi server besar tanpa UI, konsol, dan sebagainya. Mereka memproses permintaan dari ribuan pengguna pada saat yang sama dan seringkali terjadi berbagai kesalahan. Apalagi ketika utas yang berbeda mulai saling mengganggu.

Dan, pada kenyataannya, satu-satunya cara untuk menemukan kesalahan dan kegagalan yang jarang direproduksi dalam situasi seperti itu adalah dengan menulis ke log / file semua yang terjadi di setiap utas.

Paling sering, informasi ditulis ke log tentang parameter metode yang dipanggil, semua kesalahan yang dicegat, dan banyak informasi perantara. Semakin lengkap log, semakin mudah mengembalikan urutan kejadian dan melacak penyebab kegagalan atau kesalahan.

Tetapi semakin besar lognya, semakin sulit untuk bekerja dengannya. Terkadang log mencapai beberapa gigabyte per hari. Ini baik-baik saja.

1.2 Log gagal

Sebagai log pertama, pengembang hanya menggunakan keluaran ke konsol . Lebih mudah melakukan ini selama debugging aplikasi - ketika semua informasi penting dan nilai variabel ditulis ke konsol. Tetapi log semacam itu sama sekali tidak dapat diterapkan selama pengoperasian normal aplikasi.

Pertama, aplikasi mungkin ingin menampilkan sesuatu ke konsol itu sendiri, dan pengguna sama sekali tidak ingin melihat informasi layanan yang ditujukan untuk pemrogram.

Kedua, ukuran buffer konsol terbatas, Anda tidak dapat menulis banyak di sana.

Dan terakhir, ketiga, informasi tentang kesalahan program yang dikumpulkan dalam jangka waktu lama harus dikirim ke pengembang program. Dan paling nyaman untuk menulis semua informasi ini sekaligus ke file.

Pengembang dengan cepat memecahkan masalah pertama - mereka menghasilkan aliran keluaran lain - System.err. Anda dapat menulis pesan ke sana dan pesan itu akan dikirim ke utas terpisah, dan bukan ke konsol standar.

Dan bahkan masalah menulis ke file pun terpecahkan:

// Define the file to which we will write the log
System.setErr(new PrintStream(new File("log.txt")));
// Display messages
System.err.println("Message 1");
System.err.println("Message 2");
// Display an error message
try {
    throw new Exception("Error message");
} catch (Exception e) {
    e.printStackTrace();
}

Tetapi bahkan dalam bentuk ini, itu tidak menyelesaikan seluruh masalah, jadi diputuskan untuk membuat perpustakaan khusus yang akan menulis pesan log ke file. Dia melakukannya dengan cara yang cerdas dan memungkinkan fleksibilitas untuk mengonfigurasi filter untuk mencatat peristiwa dan data.

Seluruh proses penebangan sebenarnya terdiri dari tiga bagian:

  • Bagian pertama adalah pengumpulan informasi .
  • Bagian kedua adalah penyaringan informasi yang dikumpulkan.
  • Bagian ketiga adalah pencatatan informasi yang dipilih.

1.3 Pengantar log4j logger

Logger populer pertama di komunitas Java adalah log4j. Memasukkannya ke dalam proyek sangat sederhana, untuk ini Anda hanya perlu menambahkan beberapa baris ke pom.xml Anda


<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>2.2.17</version>
</dependency>

Interaksi program Anda dengan logger seperti itu akan terlihat seperti ini:

class Manager {
   private static final Logger logger = LoggerFactory.getLogger(Manager.class);

   public boolean processTask(Task task) {
        logger.debug("processTask id = " + task.getId());
        try {
            task.start();
            task.progress();
            task.complete();
            return true;
        } catch (Exception e) {
            logger.error("Unknown error", e);
            return false;
        }
    }
}

Tiga hal terjadi di sini:

Penciptaan objek disorot dalam warna hijau Logger . Objeknya disimpan dalam variabel statis untuk memudahkan pekerjaan lebih lanjut dengannya. Dan juga getLogger()informasi tentang kelas tempat informasi dikumpulkan diteruskan ke metode.

Garis yang disorot dengan warna biru adalah tempat kami mencatat informasi bernilai hanya selama proses debug . Untuk ini, metode khusus digunakan -debug()

Dan terakhir, baris tempat kami menyimpan pengecualian yang muncul ke log disorot dengan warna merah . Pengecualian adalah kesalahan potensial, jadi file error().