Pengenalan Pembalakan Java

1. Gambaran keseluruhan

Pembalakan adalah alat bantu yang kuat untuk memahami dan menyahpijak tingkah laku jangka masa program. Log menangkap dan mengekalkan data penting dan menyediakannya untuk dianalisis pada bila-bila masa.

Artikel ini membincangkan kerangka kerja pembalakan java yang paling popular, Log4j 2 dan Logback, bersama dengan pendahulunya Log4j, dan secara ringkas menyentuh SLF4J, fasad pembalakan yang menyediakan antara muka yang sama untuk pelbagai kerangka pembalakan.

2. Mengaktifkan Pembalakan

Semua kerangka kerja pembalakan yang dibincangkan dalam artikel tersebut berkongsi pendapat tentang pembalak, pelengkap dan susun atur. Membolehkan pembalakan di dalam projek mengikuti tiga langkah biasa:

  1. Menambah perpustakaan yang diperlukan
  2. Konfigurasi
  3. Meletakkan penyataan log

Bahagian yang akan datang membincangkan langkah-langkah untuk setiap rangka kerja secara individu.

3. Log4j 2

Log4j 2 adalah versi baru dan diperbaiki kerangka pembalakan Log4j. Peningkatan yang paling menarik adalah kemungkinan pembalakan asinkron. Log4j 2 memerlukan perpustakaan berikut:

 org.apache.logging.log4j log4j-api 2.6.1   org.apache.logging.log4j log4j-core 2.6.1 

Versi log4j-api terkini yang anda dapati di sini dan log4j-core - di sini.

3.1. Konfigurasi

Mengkonfigurasi Log4j 2 berdasarkan pada fail log4j.xml konfigurasi utama . Perkara pertama yang perlu dikonfigurasi adalah pelengkap.

Ini menentukan di mana mesej log akan dihantar. Destinasi boleh menjadi konsol, fail, soket, dll.

Log4j 2 mempunyai banyak pelengkap untuk tujuan yang berbeza, anda boleh mendapatkan lebih banyak maklumat di laman rasmi Log4j 2.

Mari kita lihat contoh konfigurasi mudah:

Anda boleh menetapkan nama untuk setiap pelamar, misalnya menggunakan konsol nama dan bukannya stdout .

Perhatikan elemen PatternLayout - ini menentukan bagaimana rupa mesej. Dalam contoh kami, corak ditetapkan berdasarkan pola pola , di mana % d menentukan corak tarikh, % p - output tahap log, % m - output mesej yang dicatat dan % n - menambah simbol baris baru. Lebih banyak maklumat mengenai corak yang anda dapati di halaman Log4j 2 rasmi.

Akhirnya - untuk mengaktifkan pelekat (atau berbilang) anda perlu menambahkannya bahagian:

3.2. Log masuk ke Fail

Kadang kala anda perlu menggunakan log ke fail, jadi kami akan menambahkan logout logout ke konfigurasi kami:

   %d{yyyy-MM-dd HH:mm:ss} %-5p %m%nw   

The File appender mempunyai beberapa parameter yang boleh dikonfigurasikan:

  • fail - menentukan nama fail fail log
  • append - Nilai lalai untuk param ini adalah benar, yang bermaksud bahawa secara lalai File appender akan ditambahkan ke fail yang ada dan tidak memotongnya.
  • PatternLayout yang dijelaskan dalam contoh sebelumnya.

Untuk membolehkan fail appender anda perlu menambah kepada bahagian:

3.3. Pembalakan Asinkron

Sekiranya anda ingin menjadikan Log4j 2 anda tidak segerak, anda perlu menambahkan perpustakaan gangguan LMAX ke pom.xml anda . LMAX disruptor adalah perpustakaan komunikasi antara utas bebas kunci.

Menambah gangguan pada pom.xml:

 com.lmax disruptor 3.3.4 

Disruptor versi terkini boleh didapati di sini.

Sekiranya anda ingin menggunakan gangguan LMAX, anda perlu menggunakannya bukannya dalam konfigurasi anda.

Atau anda boleh mengaktifkan pembalakan tidak segerak dengan menetapkan sifat sistem Log4jContextSelector ke org.apache.logging.log4j.core.async.AsyncLoggerContextSelector .

Anda tentu saja boleh membaca lebih lanjut mengenai konfigurasi logger async Log4j2 dan melihat beberapa rajah prestasi di halaman rasmi Log4j2.

3.4. Penggunaan

Berikut adalah contoh mudah yang menunjukkan penggunaan Log4j untuk pembalakan:

import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; public class Log4jExample { private static Logger logger = LogManager.getLogger(Log4jExample.class); public static void main(String[] args) { logger.debug("Debug log message"); logger.info("Info log message"); logger.error("Error log message"); } }

Setelah berjalan, aplikasi akan mencatat mesej berikut ke konsol dan fail yang bernama baeldung.log:

2016-06-16 17:02:13 INFO Info log message 2016-06-16 17:02:13 ERROR Error log message

Sekiranya anda menaikkan tahap log root ke RALAT :

Keluarannya akan seperti berikut:

2016-06-16 17:02:13 ERROR Error log message

Seperti yang anda lihat, mengubah tahap log ke parameter atas menyebabkan mesej dengan tahap log yang lebih rendah tidak akan dicetak ke appenders.

Kaedah logger.error juga boleh digunakan untuk mencatat pengecualian yang berlaku:

try { // Here some exception can be thrown } catch (Exception e) { logger.error("Error log message", throwable); }

3.5. Konfigurasi Tahap Pakej

Katakan anda perlu menunjukkan mesej dengan tahap log TRACE - contohnya dari pakej tertentu seperti com.baeldung.log4j2 :

logger.trace("Trace log message");

Untuk semua pakej lain anda mahu terus log masuk hanya mesej INFO.

Perlu diingat bahawa TRACE lebih rendah daripada INFO tahap log root yang kami nyatakan dalam konfigurasi.

To enable logging only for one of packages you need to add the following section before to your log4j.xml:

It will enable logging for com.baeldung.log4j package and your output will look like:

2016-06-16 17:02:13 TRACE Trace log message 2016-06-16 17:02:13 DEBUG Debug log message 2016-06-16 17:02:13 INFO Info log message 2016-06-16 17:02:13 ERROR Error log message

4. Logback

Logback is meant to be an improved version of Log4j, developed by the same developer who made Log4j.

Logback also has a lot more features compared to Log4j, with many of them being introduced into Log4j 2 as well. Here's a quick look at all of the advantages of Logback on the official site.

Let's start by adding the following dependency to the pom.xml:

 ch.qos.logback logback-classic 1.1.7 

This dependency will transitively pull in another two dependencies, the logback-core and slf4j-api. Note that the latest version of Logback can be found here.

4.1. Configuration

Let's now have a look at a Logback configuration example:

 # Console appender   # Pattern of log message for console appender %d{yyyy-MM-dd HH:mm:ss} %-5p %m%n   # File appender  baeldung.log false  # Pattern of log message for file appender %d{yyyy-MM-dd HH:mm:ss} %-5p %m%n   # Override log level for specified package      

Logback uses SLF4J as an interface, so you need to import SLF4J's Logger and LoggerFactory.

4.2. SLF4J

SLF4J provides a common interface and abstraction for most of the Java logging frameworks. It acts as a facade and provides standardized API for accessing the underlying features of the logging framework.

Logback uses SLF4J as native API for its functionality. Following is the example using Logback logging:

import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Log4jExample { private static Logger logger = LoggerFactory.getLogger(Log4jExample.class); public static void main(String[] args) { logger.debug("Debug log message"); logger.info("Info log message"); logger.error("Error log message"); } }

The output will remain the same as in previous examples.

5. Log4J

Finally, let's have a look at the venerable Log4j logging framework.

At this point it's of course outdated, but worth discussing as it lays the foundation for its more modern successors.

Many of the configuration details match those discussed in Log4j 2 section.

5.1. Configuration

First of all you need to add Log4j library to your projects pom.xml:

 log4j log4j 1.2.17 

Here you should be able to find latest version of Log4j.

Lets take a look at a complete example of simple Log4j configuration with only one console appender:

is open tag of whole configuration which has one property – debug. It determines whether you want to add Log4j debug information to logs.

5.2. Usage

After you have added Log4j library and configuration you can use logger in your code. Lets take a look at a simple example:

import org.apache.log4j.Logger; public class Log4jExample { private static Logger logger = Logger.getLogger(Log4jExample.class); public static void main(String[] args) { logger.debug("Debug log message"); logger.info("Info log message"); logger.error("Error log message"); } }

6. Conclusion

Artikel ini menunjukkan contoh yang sangat mudah bagaimana anda boleh menggunakan rangka kerja pembalakan yang berbeza seperti Log4j, Log4j2 dan Logback. Ini merangkumi contoh konfigurasi mudah untuk semua kerangka kerja yang disebutkan.

Contoh-contoh yang menyertai artikel ini boleh didapati di GitHub.