1.1 Pengenalan kepada log

Log ialah senarai peristiwa yang telah berlaku. Hampir seperti jurnal nautika atau diari. Oleh itu, pembalak ialah objek yang anda boleh log masuk. Dalam pengaturcaraan, adalah kebiasaan untuk log hampir segala-galanya. Dan di Jawa, semuanya seperti itu dan lebih sedikit lagi.

logger java

Hakikatnya ialah program Java selalunya merupakan aplikasi pelayan yang besar tanpa UI, konsol dan sebagainya. Mereka memproses permintaan daripada beribu-ribu pengguna pada masa yang sama dan selalunya pelbagai ralat berlaku. Terutama apabila benang yang berbeza mula mengganggu antara satu sama lain.

Dan, sebenarnya, satu-satunya cara untuk mencari ralat dan kegagalan yang jarang diterbitkan semula dalam situasi sedemikian adalah dengan menulis ke log / fail semua yang berlaku dalam setiap utas.

Selalunya, maklumat ditulis pada log tentang parameter kaedah yang dipanggil, semua ralat yang dipintas, dan banyak maklumat perantaraan. Lebih lengkap log, lebih mudah untuk memulihkan urutan peristiwa dan mengesan punca kegagalan atau ralat.

Tetapi lebih besar log, lebih sukar untuk bekerja dengannya. Kadangkala log mencapai beberapa gigabait setiap hari. Ini baik.

1.2 Log gagal

Sebagai log pertama, pembangun hanya menggunakan output ke konsol . Adalah mudah untuk melakukan ini semasa penyahpepijatan aplikasi - apabila semua maklumat penting dan nilai pembolehubah ditulis ke konsol. Tetapi log sedemikian tidak boleh digunakan sepenuhnya semasa operasi biasa aplikasi.

Pertama, aplikasi mungkin mahu mengeluarkan sesuatu kepada konsol itu sendiri, dan pengguna tidak mahu melihat maklumat perkhidmatan yang dimaksudkan untuk pengaturcara sama sekali.

Kedua, saiz penimbal konsol adalah terhad, anda tidak boleh menulis banyak di sana.

Dan akhirnya, ketiga, maklumat tentang ralat program yang dikumpul dalam jangka masa yang panjang harus dihantar kepada pembangun program. Dan paling mudah untuk menulis semua maklumat ini sekaligus ke fail.

Pembangun cepat menyelesaikan masalah pertama - mereka datang dengan aliran keluaran lain - System.err. Anda boleh menulis mesej kepadanya dan ia akan dihantar ke urutan yang berasingan, dan bukan ke konsol standard.

Malah masalah dengan menulis ke fail telah diselesaikan:

// 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 walaupun dalam bentuk ini, ia tidak menyelesaikan keseluruhan masalah, jadi ia telah memutuskan untuk mencipta perpustakaan khas yang akan menulis mesej log ke fail. Dia melakukannya dengan cara yang bijak dan membenarkan fleksibiliti untuk mengkonfigurasi penapis untuk acara dan data yang dilog.

Keseluruhan proses pembalakan, sebenarnya, terdiri daripada tiga bahagian:

  • Bahagian pertama ialah pengumpulan maklumat .
  • Bahagian kedua ialah penapisan maklumat yang dikumpul.
  • Bahagian ketiga ialah rakaman maklumat yang dipilih.

1.3 Pengenalan kepada log4j logger

Pembalak popular pertama dalam komuniti Java ialah log4j. Memasukkannya dalam projek adalah sangat mudah, untuk ini anda perlu menambah hanya beberapa baris pada pom.xml anda

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

Interaksi program anda dengan pembalak sedemikian akan kelihatan 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 perkara berlaku di sini:

Penciptaan objek diserlahkan dalam warna hijau Logger . Objeknya disimpan dalam pembolehubah statik untuk memudahkan kerja selanjutnya dengannya. Dan juga getLogger()maklumat tentang kelas di mana maklumat dikumpul dihantar kepada kaedah.

Baris yang diserlahkan dengan warna biru ialah tempat kami log maklumat nilai hanya semasa penyahpepijatan . Untuk ini, kaedah khas digunakan -debug()

Dan akhirnya, baris di mana kita menyimpan pengecualian yang telah timbul pada log diserlahkan dengan warna merah . Pengecualian adalah kemungkinan ralat, jadi error().