Rumah  >  Artikel  >  Java  >  Cara membetulkan: Ralat log Java: Kandungan rekod tiada

Cara membetulkan: Ralat log Java: Kandungan rekod tiada

WBOY
WBOYasal
2023-08-26 12:31:491204semak imbas

Cara membetulkan: Ralat log Java: Kandungan rekod tiada

Cara menyelesaikan: Ralat pengelogan Java: Kandungan rekod tiada

Petikan:

Dalam pembangunan aplikasi Java, menggunakan log adalah amalan yang sangat biasa. Pengelogan boleh membantu kami menjejaki proses pelaksanaan program, menyelesaikan masalah dan memantau status berjalan sistem. Walau bagaimanapun, kadangkala kita mungkin menghadapi masalah yang sangat menjengkelkan: kandungan rekod hilang.

Mungkin terdapat banyak sebab untuk masalah ini, seperti tetapan tahap log yang salah, konfigurasi sasaran output log yang salah, isu konkurensi semasa penulisan log, dsb. Dalam artikel ini, kami akan memperkenalkan beberapa penyelesaian biasa untuk membantu anda menyelesaikan masalah kehilangan kandungan rekod dalam ralat log Java.

1. Semak tetapan tahap log

Rangka kerja pengelogan Java biasanya menyokong berbilang peringkat log, seperti TRACE, DEBUG, INFO, WARN dan ERROR, dsb. Jika kami menetapkan tahap log terlalu tinggi, seperti hanya merekodkan log tahap ERROR, maka maklumat log di bawah tahap ini akan diabaikan. Oleh itu, kita perlu memastikan bahawa tahap log ditetapkan dengan betul supaya semua maklumat kritikal direkodkan.

Tetapan tahap log biasanya dibuat dalam fail konfigurasi, seperti log4j.properties atau logback.xml. Berikut ialah contoh log4j.properties:

log4j.rootLogger=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%5p] %m%n

Dalam konfigurasi di atas, kami menetapkan tahap logger akar kepada INFO. Jika kita ingin merekod kandungan log pada tahap yang lebih tinggi (seperti DEBUG), kita perlu menukar tahap kepada DEBUG.

2. Semak konfigurasi sasaran output log

Satu lagi ralat biasa ialah sasaran output log dikonfigurasikan dengan salah. Log mungkin dikonfigurasikan untuk mengeluarkan ke destinasi yang berbeza seperti konsol, fail atau pangkalan data. Jika konfigurasi kami salah, kandungan log mungkin tidak dikeluarkan dengan betul.

Teruskan mengambil contoh log4j.properties di atas, katakan kita ingin mengeluarkan log ke fail bernama app.log. Kami boleh menambah konfigurasi berikut pada fail konfigurasi:

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.file=app.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%5p] %m%n
log4j.rootLogger=INFO, file

Dalam konfigurasi di atas, kami menambah fail bernama appender dan mengkonfigurasinya untuk output ke fail app.log.

Pastikan sasaran output dikonfigurasikan dengan betul untuk mengelakkan masalah kehilangan kandungan log.

3. Selesaikan masalah penulisan serentak

Apabila beberapa utas menulis pada log pada masa yang sama, masalah penulisan serentak mungkin berlaku, mengakibatkan kehilangan sebahagian daripada kandungan rekod log. Untuk menyelesaikan masalah ini, kita boleh mengambil salah satu kaedah berikut:

  1. Gunakan rangka kerja pembalakan selamat benang: Sesetengah rangka kerja pembalakan sendiri menyediakan kaedah penulisan selamat benang, seperti log4j2. Jika aplikasi anda mempunyai keperluan tinggi untuk penulisan serentak, pertimbangkan untuk menggunakan rangka kerja pengelogan selamat benang ini.
  2. Perkenalkan mekanisme penyegerakan: Jika anda menggunakan rangka kerja pembalakan yang tidak selamat untuk benang, anda boleh memperkenalkan mekanisme penyegerakan dalam proses menulis log untuk memastikan atomicity setiap operasi tulis. Kod sampel adalah seperti berikut:
public class Logger {
    private static final Object lock = new Object();
    private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(Logger.class);

    public static void log(String message) {
        synchronized (lock) {
            logger.info(message);
        }
    }
}

Dalam kod di atas, kami menggunakan objek kunci statik untuk memastikan hanya satu utas boleh mengakses pembalak setiap kali log ditulis.

Kesimpulan:

Masalah kandungan rekod yang hilang dalam ralat log Java mungkin mempunyai pelbagai punca, termasuk tetapan tahap log yang salah, konfigurasi sasaran output log yang salah dan isu penulisan serentak. Melalui pemeriksaan dan penyahpepijatan yang teliti, kami boleh mencari dan menyelesaikan punca masalah.

Dalam proses pembangunan sebenar, kita harus menetapkan tahap log secara munasabah, menyemak konfigurasi sasaran output log, dan mengambil langkah yang sepadan untuk menangani isu penulisan serentak untuk memastikan integriti dan ketepatan rekod log.

Rujukan:

  1. Projek Perkhidmatan Pembalakan Apache https://logging.apache.org/
  2. http://logging.apache.org/log4j
  3. logback /

Atas ialah kandungan terperinci Cara membetulkan: Ralat log Java: Kandungan rekod tiada. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn