3.1 Daftar level acara

Logging adalah proses merekam setiap peristiwa yang terjadi saat program sedang berjalan. Tugas Anda sebagai programmer adalah record everything importantkarena dengan demikian, ketika productionada kesalahan aneh dan / atau serius, Anda tidak akan memiliki apa pun selain log ini.

Kesalahan apa pun akan dihilangkan berkali-kali lebih cepat jika Anda memiliki semua informasi tentangnya dan tentang semua riwayat panggilan. Tetapi kesimpulan sederhana mengikuti dari sini - untuk mencatat semuanya secara umum: panggilan semua metode, nilai semua parameter.

Ini juga bukan pilihan - terlalu banyak informasi sama buruknya dengan terlalu sedikit. Kami membutuhkan pencatatan cerdas. Dibuat oleh manusia untuk manusia. Dan di sini kita sampai pada fakta pertama tentang logging - semua entri dalam log dibagi menjadi beberapa kategori bahkan pada saat pembuatannya.

Daftar level acara

Pemrogram, saat menulis suatu peristiwa ke log, harus memutuskan sendiri seberapa penting informasi ini. Tingkat keparahan acara dipilih oleh penulis pesan. Ada log4j5 tingkat kepentingan informasi yang dicatat:

  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

Di bawah ini kami akan menceritakan tentang mereka secara lebih rinci.

3.2 DEBUG

Level DEBUGdianggap paling tidak penting. Informasi yang ditulis ke log dengan tingkat kepentingan ini hanya diperlukan selama proses debug aplikasi. Untuk mencatat informasi yang diperlukan selama debugging, metode ini digunakan debug().

Contoh:

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

Perhatikan, metodenya debugada di awal metode (metode belum punya waktu untuk melakukan apa pun) dan menulis nilai variabel yang diteruskan ke metode ke log. Ini adalah kasus penggunaan yang paling umum untuk metode ini debug().

3.3 INFO dan PERINGATAN

Dua tingkat berikutnya adalah INFOdan WARN. Ada dua metode untuk mereka - info()dan warn().

Tingkat INFOdigunakan hanya untuk pesan informasional: ini dan itu terjadi. Saat Anda mulai menguraikan kesalahan di log, akan sangat berguna untuk membaca latar belakangnya. Metode ini sempurna untuk ini info().

Level WARNdigunakan untuk menulis peringatan (dari kata warning ). Biasanya, dengan tingkat kepentingan ini, informasi tertulis bahwa ada yang tidak beres, tetapi program tahu apa yang harus dilakukan dalam situasi ini.

Misalnya, dalam proses menulis file ke disk, ternyata file seperti itu sudah ada. Di sini program dapat mencatat peringatan (peringatan), tetapi menampilkan kotak dialog kepada pengguna dan menawarkan untuk memilih nama file yang berbeda.

Contoh:

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

    public boolean saveFile(FileData file) {
        logger.info(“save the file ” + file.getName());
        boolean resultOK = SaveUtils.save(file);
        if (resultOK) return true;

        logger.warn(“file writing problem ” + file.getName());
        String filename = Dialog.selectFile();
        boolean result = SaveUtils.save(file, filename);
        return result;
    }

3.4 KESALAHAN dan FATAL

Terakhir, dua level logging yang paling penting adalah ERRORdan FATAL. Bagi mereka, ada juga metode khusus dengan nama yang sama: error()dan fatal().

Mereka juga memutuskan untuk membagi kesalahan menjadi dua kategori - kesalahan biasa dan kesalahan fatal . Kesalahan fatal paling sering mengakibatkan crash aplikasi (untuk aplikasi desktop) atau crash layanan web (untuk aplikasi web).

Contoh bagus lainnya adalah sistem operasi Windows. Jika program Anda baru saja macet, maka dari sudut pandang sistem operasi, ini adalah Error. Dan jika sistem operasinya sendiri telah jatuh dan Anda melihat layar biru kematian Windows, maka ini sudah Fatal error.

Dalam aplikasi Java, peristiwa Errorpaling sering Fataldikaitkan dengan pengecualian yang dimunculkan. Contoh:

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

3.5 Apa yang harus dicatat

Tentu saja, tidak ada gunanya mencatat semuanya secara berurutan. Dalam kebanyakan kasus, ini sangat memperburuk keterbacaan log, dan bagaimanapun juga, log ditulis terlebih dahulu untuk dibaca.

Selain itu, Anda tidak dapat menulis berbagai informasi pribadi dan keuangan ke log. Sekarang dengan ketat dan mudah ini Anda dapat mengalami denda atau tuntutan hukum. Cepat atau lambat, batang kayu seperti itu akan bocor ke samping dan tidak akan ada masalah.

Jadi apa yang harus dicatat?

Pertama, Anda perlu mencatat awal aplikasi . Setelah aplikasi dimulai, disarankan untuk mencatat mode operasinya dan berbagai pengaturan penting - ini akan memudahkan untuk membaca log di masa mendatang.

Kedua, Anda perlu mencatat status semua layanan pihak ketiga yang digunakan aplikasi Anda: sistem surat, layanan eksternal apa pun. Minimal, Anda perlu mengamankan momen koneksi ke mereka untuk memastikan bahwa mereka berfungsi dengan baik.

Ketiga, semua pengecualian harus dicatat . Jika diharapkan, maka informasi tentangnya dapat ditulis dengan kompak. Informasi lengkap tentang pengecualian memberikan 50%-80% informasi penting saat mencari bug.

Anda juga perlu mencatat penutupan aplikasi . Aplikasi harus berhenti secara normal dan tidak membuang lusinan kesalahan ke dalam log. Seringkali di tempat ini Anda dapat menemukan tugas macet, masalah dengan kumpulan utas, atau masalah dengan menghapus file sementara.

Pastikan untuk mencatat segala sesuatu yang berkaitan dengan keamanan dan otorisasi pengguna . Jika pengguna mencoba masuk atau mengatur ulang kata sandi mereka 10 kali berturut-turut, informasi ini harus tercermin dalam log.

Catat informasi sebanyak mungkin tentang tugas asinkron - pengecualian sering hilang di utas tersebut. Untuk tugas asinkron, pastikan untuk mencatat awal dan akhirnya. Penyelesaian yang berhasil harus dicatat dengan cara yang sama seperti yang bermasalah.

Apa lagi? Meluncurkan tugas berjangka waktu, meluncurkan tugas tersimpan SQL-procedures, menyinkronkan data, semua yang terkait dengan transaksi terdistribusi. Saya pikir itu cukup untuk permulaan. Anda akan menambah daftar ini di masa mendatang.