3.1 Senarai peringkat acara

Pengelogan ialah proses merekod sebarang peristiwa yang berlaku semasa program sedang berjalan. Kewajipan anda sebagai pengaturcara adalah record everything importantkerana, apabila productionterdapat ralat pelik dan / atau serius, anda tidak akan mempunyai apa-apa lagi selain log ini.

Sebarang ralat akan dihapuskan berkali-kali lebih cepat jika anda mempunyai semua maklumat mengenainya dan tentang semua sejarah panggilan. Tetapi kesimpulan mudah berikut dari sini - untuk log semuanya secara umum: panggilan semua kaedah, nilai semua parameter.

Ini juga bukan pilihan - terlalu banyak maklumat sama buruknya dengan terlalu sedikit. Kami memerlukan pembalakan pintar. Dibuat oleh manusia untuk manusia. Dan di sini kita sampai kepada fakta pertama tentang pembalakan - semua entri dalam log dibahagikan kepada kategori walaupun pada masa penciptaannya.

Senarai peringkat acara

Pengaturcara, apabila menulis acara ke log, mesti memutuskan sendiri betapa pentingnya maklumat ini. Tahap keterukan acara dipilih oleh pengarang mesej. Terdapat log4j5 tahap kepentingan maklumat log:

  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

Di bawah ini kami akan memberitahu tentang mereka dengan lebih terperinci.

3.2 DEBUG

Tahap itu DEBUGdianggap paling tidak penting. Maklumat yang ditulis pada log dengan tahap kepentingan ini hanya diperlukan semasa penyahpepijatan aplikasi. Untuk log maklumat yang diperlukan semasa penyahpepijatan, kaedah 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;
        }
    }
}

Beri perhatian, kaedah debugadalah pada permulaan kaedah (kaedah belum sempat melakukan apa-apa lagi) dan menulis nilai pembolehubah yang dihantar ke kaedah ke log. Ini adalah kes penggunaan yang paling biasa untuk kaedah tersebut debug().

3.3 INFO dan AMARAN

Dua peringkat seterusnya ialah INFOdan WARN. Terdapat dua kaedah untuk mereka - info()dan warn().

Tahap INFOdigunakan hanya untuk mesej maklumat: ini dan itu berlaku. Apabila anda mula menghuraikan ralat dalam log, ia boleh menjadi sangat berguna untuk membaca latar belakangnya. Kaedah ini sesuai untuk ini info().

Tahap WARNdigunakan untuk menulis amaran (daripada perkataan amaran ). Biasanya, dengan tahap kepentingan ini, maklumat ditulis bahawa sesuatu telah berlaku, tetapi program tahu apa yang perlu dilakukan dalam situasi ini.

Sebagai contoh, dalam proses menulis fail ke cakera, ternyata fail sedemikian sudah wujud. Di sini program boleh log amaran (amaran), tetapi tunjukkan kepada pengguna kotak dialog dan tawarkan untuk memilih nama fail yang berbeza.

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 RALAT dan MAUT

Akhir sekali, dua peringkat pembalakan yang paling penting ialah ERRORdan FATAL. Bagi mereka, terdapat juga kaedah khas dengan nama yang sama: error()dan fatal().

Mereka juga memutuskan untuk membahagikan ralat kepada dua kategori - ralat biasa dan ralat maut . Ralat maut paling kerap mengakibatkan ranap aplikasi (untuk aplikasi desktop) atau ranap perkhidmatan web (untuk aplikasi web).

Satu lagi contoh yang baik ialah sistem pengendalian Windows. Jika program anda baru sahaja ranap, maka dari sudut pandangan sistem pengendalian, ini adalah Error. Dan jika sistem pengendalian itu sendiri telah jatuh dan anda melihat skrin biru Windows kematian, maka ini sudah Fatal error.

Dalam aplikasi Java, acara Errorpaling kerap Fataldikaitkan dengan pengecualian yang dibangkitkan. 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 Perkara yang perlu dilog

Sudah tentu, ia tidak berbaloi untuk mengelog semuanya berturut-turut. Dalam kebanyakan kes, ini secara mendadak memburukkan kebolehbacaan log, dan selepas semua, log ditulis di tempat pertama untuk dibaca.

Di samping itu, anda tidak boleh menulis pelbagai maklumat peribadi dan kewangan pada log. Sekarang dengan ini dengan tegas dan mudah anda boleh menghadapi denda atau tindakan undang-undang. Lambat laun, log sebegitu akan bocor ke tepi dan kemudiannya tiada masalah.

Jadi apa yang perlu dilog?

Pertama, anda perlu log permulaan aplikasi . Selepas aplikasi dimulakan, disyorkan untuk log mod operasinya dan pelbagai tetapan penting - ini akan memudahkan untuk membaca log pada masa hadapan.

Kedua, anda perlu merekodkan status semua perkhidmatan pihak ketiga yang mana aplikasi anda berfungsi: sistem mel, sebarang perkhidmatan luaran. Sekurang-kurangnya, anda perlu memastikan masa sambungan kepada mereka untuk memastikan ia berfungsi dengan betul.

Ketiga, semua pengecualian perlu dilog . Sekiranya mereka dijangka, maka maklumat mengenainya boleh ditulis dengan padat. Maklumat lengkap tentang pengecualian memberikan 50%-80% maklumat penting semasa mencari pepijat.

Anda juga perlu log penutupan aplikasi . Aplikasi mesti ditamatkan seperti biasa dan tidak membuang berpuluh-puluh ralat ke dalam log. Selalunya di tempat ini anda boleh menemui tugas yang tersekat, masalah dengan kumpulan benang atau masalah dengan memadamkan fail sementara.

Pastikan anda log semua yang berkaitan dengan keselamatan dan kebenaran pengguna . Jika pengguna cuba log masuk atau menetapkan semula kata laluan mereka 10 kali berturut-turut, maklumat ini harus ditunjukkan dalam log.

Log maklumat sebanyak mungkin tentang tugas tak segerak - pengecualian selalunya hilang dalam urutan sedemikian. Untuk tugasan tak segerak, pastikan anda mencatat permulaan dan tamatnya. Penyiapan yang berjaya harus dilog dengan cara yang sama seperti yang bermasalah.

Apa lagi? Melancarkan tugas bermasa, melancarkan tugas tersimpan SQL-procedures, menyegerakkan data, semua yang berkaitan dengan transaksi yang diedarkan. Saya rasa itu sudah cukup untuk permulaan. Anda akan menambah senarai ini pada masa hadapan.