LOG4JS adalah salah satu modul terbaik dalam pemrosesan log Node.js. Dibandingkan dengan konsol atau debug TJ, berikut ini sangat diperlukan untuk proyek node.js yang dimasukkan ke dalam produksi:
Artikel ini akan memberi Anda pengantar komprehensif untuk log4JS, memungkinkan Anda menggunakan log4js dalam proyek Anda dengan mudah, pengembangan dan debugging yang mudah, dan pemantauan atau pemecahan masalah secara online.
Tes kecil
Tiga baris kode berikut menunjukkan penggunaan log4js termudah:
// File: Simplest.jsvar log4js = membutuhkan ('log4js'); var logger = log4js.getlogger (); logger.debug ("waktu:", tanggal baru ());Memanggil .getLogger () dapat memperoleh instance log4js logger. Penggunaan contoh ini sama dengan konsol. Anda dapat menghubungi .debug (juga .info, .error dan metode lainnya) untuk meng -output log.
Jalankan Node Simplest.js dan outputnya adalah sebagai berikut:
$ node simplest.js [2016-08-21 00: 01: 24.852] [Debug] [Default]-Waktu: 2016-08-20t16: 01: 24.852z
Waktu: 2016-08-20T16: 01: 24.852Z adalah apa yang ingin kami output. Yang sebelumnya berisi specifier [2016-08-21 00: 01: 24.852] [debug] [default] terdaftar nanti.
Bukankah sangat mudah digunakan? Nah, sebelum kita menyelami penggunaan Log4JS yang maju, mari kita terbiasa dengan konsep -konsep dalam log4JS.
Tingkat
Ini tidak sulit untuk dipahami, ini adalah penilaian log. Hanya ketika log adalah hierarkis dapat log4js lebih baik menunjukkan log kami (berbagai tingkat log menggunakan warna yang berbeda di konsol, seperti kesalahan biasanya merah), dan ketika produksi, Anda dapat secara selektif mengantar log, seperti menghindari beberapa informasi sensitif yang dimiliki oleh .debugs bocor.
Log log4js dibagi menjadi sembilan level, dan nama dan bobot dari setiap level adalah sebagai berikut:
{All: new level (number.min_value, "all"), trace: new level (5000, "trace"), debug: level baru (10000, "debug"), info: level baru (20000, "info"), warn: level baru (30000, "warn"), kesalahan: level baru (40000, "kesalahan"), fatal "), fatal"), fatal "," FATEM, "FATEM," FAT "), FATEM:" FATLA "LEVEL"), FATEM: FATEM: FATEAL (40000, "FAT"), FATEM: FATLE (40000, "FATEM," FAT "), FATEM: FATEM (40000," FATE, "FATE," FATE, "FATE," LAY "LEBEL (40000," FAT "), FATE (40000," FATE, " Level (9007199254740992, "Mark"), // 2^53 OFF: Level Baru (Number.max_value, "Off")}Gambar sebelumnya:
Semua dari kedua tingkat ini tidak secara langsung digunakan dalam kode bisnis. Tujuh yang tersisa adalah tujuh metode yang sesuai dengan instance logger, .trace .debug .info ... dengan kata lain, ketika Anda menyebut metode ini, setara dengan level log ini. Oleh karena itu, [2016-08-21 00: 01: 24.852] sebelumnya [Debug] [Default]-Waktu: 2016-08-20T16: 01: 24.852Z adalah tingkat log ini.
jenis
LOG4JS juga memiliki konsep yang disebut Kategori (Tipe). Anda dapat mengatur jenis instance logger dan membedakan log sesuai dengan dimensi lain:
// File: set-catetory.jsvar log4js = membutuhkan ('log4js'); var logger = log4js.getlogger ('contoh'); logger.debug ("waktu:", tanggal baru ());Saat mendapatkan instance logger melalui getLogger, satu -satunya parameter yang dapat dilewati adalah LoggerCategory (seperti 'contoh'). Parameter ini menentukan kategori mana instance logger milik. Ini sama dengan debug TJ:
var debug = membutuhkan ('debug') ('pekerja'); setInterval (function () {debug ('melakukan beberapa pekerjaan');}, 1000);Dalam debug 'pekerja', itu juga merupakan klasifikasi log. Oke, kembalilah dan jalankan simpul set-catetory.js:
[2016-08-21 01: 16: 00.212] [Debug] Contoh-Waktu: 2016-08-20T17: 16: 00.212Z
Satu-satunya perbedaan dari [2016-08-21 00: 01: 24.852] sebelumnya [DEBUG] [Default]-Waktu: 2016-08-20T16: 01: 24.852Z adalah bahwa [default] telah menjadi contoh.
Apa gunanya kategori ini? Ini lebih fleksibel daripada level dan memberikan dimensi perbedaan kedua untuk log. Misalnya, Anda dapat mengatur kategori yang berbeda untuk setiap file, seperti di set-catetory.js:
// File: set-catetory.jsvar log4js = membutuhkan ('log4js'); var logger = log4js.getlogger ('set-catetory.js'); logger.debug ("waktu:", tanggal baru ());Anda dapat melihat dari log [2016-08-21 01: 24: 07.332] [debug] set-catetory.js-waktu: 2016-08-20t17: 24: 07.331z bahwa log ini berasal dari file set-catetory.js. Atau gunakan kategori yang berbeda untuk paket node yang berbeda, sehingga log dapat dibedakan dari mana modul mereka berasal.
Appender
Nah, sekarang log memiliki level dan kategori, yang memecahkan masalah penilaian dan klasifikasi log di pintu masuk. Dalam log4JS, masalah ekspor log (mis. Di mana output log adalah output) diselesaikan oleh Appender.
Appender default
Berikut ini adalah pengaturan Appender default untuk Log4JS Internal:
// log4js.jsdefaultconfig = {appenders: [{type: "console"}]}Seperti yang Anda lihat, ketika log tidak dikonfigurasi dengan cara apa pun, log adalah output ke konsol secara default.
Siapkan Appender Anda Sendiri
Kami dapat mengatur appender yang kami inginkan melalui log4js.configure.
// File: custom-appender.jsvar log4js = membutuhkan ('log4js'); log4js.configure ({appenders: [{type: 'file', fileName: 'default.log'}]}) var logger = log4js.getLogger ('custom-applend'); logger.de () (););););););););););););););););););););););););););););););););); date new-logger.Dalam contoh di atas, kami mengeluarkan log ke file dan menjalankan kode. LOG4JS membuat file bernama Default.log di direktori saat ini. [2016-08-21 08: 43: 21.272] [Debug] Custom-Appender-Waktu: 2016-08-21T00: 43: 21.272z mengeluarkannya ke file.
Appender yang disediakan oleh log4js
Konsol dan file keduanya merupakan appenders yang disediakan oleh Log4JS, di samping ini:
DateFile: Log adalah output ke file, dan file log dapat digulir dalam mode tanggal tertentu, seperti output ke default-2016-08-21.log hari ini, dan output ke default-2016-08-22.log besok;
SMTP: Log Output ke Email;
MailGun: Log Output ke MailGun melalui MailGun API;
Levelfilter dapat disaring melalui level;
Dan seterusnya, beberapa appenders lainnya, Anda dapat melihat daftar lengkapnya di sini.
Tingkat penyaringan dan kategori
Kita dapat menyesuaikan konfigurasi appender dan memfilter level dan kategori log:
// File: level-and-category.jsvar log4js = membutuhkan ('log4js'); log4js.configure ({appenders: [{type: 'logelfilter', level: 'debug', kategori: 'kategori1', appender: {type: 'file', fileName: 'default. log4js.getlogger ('Category1'); var logger2 = log4js.getlogger ('Category2'); logger1.debug ("waktu:", tanggal baru ()); logger1.trace ("waktu:", tanggal baru ()); logger2.debug ("waktu:", tanggal baru ());Jalankan, tambahkan log ke default.log:
[2016-08-21 10: 08: 21.630] [Debug] Kategori1-Waktu: 2016-08-21T02: 08: 21.629z
Mari kita lihat kode:
Gunakan LogleVelfilter dan level untuk menyaring level log, dan semua log dengan bobot lebih besar dari atau sama dengan debug akan menjadi output. Ini juga pentingnya berat level log yang disebutkan sebelumnya;
Pilih kategori untuk mengeluarkan log melalui kategori. Log di bawah Kategori 2 disaring. Konfigurasi juga menerima array, seperti ['Category1', 'Category2'], sehingga kedua kategori log akan menjadi output ke file.
Tata letak
Layout adalah fitur canggih yang disediakan oleh Log4JS. Melalui tata letak, kami dapat menyesuaikan format setiap log output. LOG4JS memiliki empat jenis format:
MessagePassthrough: Hanya output konten log;
Dasar: Level waktu, log dan kategori akan ditambahkan sebelum konten log, dan tata letak default log biasanya ditambahkan;
Warna/berwarna: Tambahkan warna ke log berdasarkan dasar, Konsol Appender menggunakan tata letak ini secara default;
Pola: Ini adalah tipe khusus yang dapat ditentukan oleh format apa pun yang Anda inginkan.
Contoh pola:
// File: tata letak-pattern.jsvar log4js = membutuhkan ('log4js'); log4js.configure ({appenders: [{type: 'console', tata letak: {type: 'pola', pola: '[%r] [%5.5p%] -%m%n'}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [%. log4js.getlogger ('tata letak-pola'); logger.debug ("waktu:", tanggal baru ());%r %p $ m $ n adalah spesifikasi bawaan untuk log4js. Anda dapat menggunakan ini untuk mengeluarkan beberapa informasi meta. Untuk detail lebih lanjut, Anda dapat merujuk ke dokumentasi Log4JS.
Mari kita jelaskan penentuan posisi Logger, Appender, dan tata letak dalam sebuah gambar.
Praktis: Akses Akses Log Output.log untuk Aplikasi Node
Untuk memfasilitasi pemeriksaan masalah, log permintaan aplikasi yang masuk dan keluar sering dicatat di lingkungan produksi. Bagaimana cara mengimplementasikannya menggunakan log4js? Cukup masukkan kode:
// File: server.jsvar log4js = membutuhkan ('log4js'); var express = membutuhkan ('ekspres'); log4js.configure ({appenders: [{type: 'datefile', fileName: 'Access.log', pola: '-yyyy-mm-dd.log', selaluinincludeper ',' -yyyyy-mm-dd.log ', selalu inincludepato:' -yyyyy-mm-dd.log ', allincincin' Express (); app.use (log4js.connectLogger (log4js.getlogger ('access'), {level: log4js.levels.info})); app.get ('/', function (req, res) {res.send ('komentar jurnal asing depan');}); app.listen (5000);Lihat apa yang kami lakukan:
Appender dikonfigurasi untuk memilih log dengan akses kategori dari log dan mengeluarkannya ke file gulir;
LOG4JS.GetLogger ('Access') Mendapat instance logger dengan akses kategori, dan meneruskannya ke middleware log4js.connectlogger. Middleware ini mengumpulkan informasi akses dan mencetaknya melalui contoh ini.
Mulai server dan kunjungi http: // localhost: 5000. Anda akan menemukan bahwa ada file tambahan bernama Access.log-2016-08-21.log di direktori, yang berisi dua log:
[2016-08-21 14: 34: 04.752] [Info] Akses - :: 1 - - "Get/http/1.1" 200 18 "" "" Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebkit/537.36 (KHTML, Like GECKO) Chrome/52. 52.3.36 (KHTML, Like GECKO) Chrome/52. 52.3.116 (KHTML, LIKE GECKO) CHROME/52.1.11.27 (KHTML, LIKE GECKO) CHROME/52.5.11.27.116 (KHTML, LIKE GECKO) CHROME/52.5.11.11.11.112.116 (KHTML, LIKE GECKO) CHROME/5.
[2016-08-21 14:34:05.002] [INFO] access - ::1 - - "GET /favicon.ico HTTP/1.1" 404 24 "http://localhost:5000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 "
Melalui fungsi klasifikasi dan appender log Log4JS, kami mengeluarkan log akses ke file gulir yang diperbarui.
Meringkaskan
Artikel ini secara komprehensif memperkenalkan penggunaan log4js. Dibandingkan dengan konsol atau alat penebangan sederhana, log4JS lebih kompleks untuk digunakan, dan tentu saja lebih kuat, dan cocok untuk aplikasi tingkat produksi. Jika Anda tertarik, silakan tinggalkan pesan untuk memberi tahu kami. Selanjutnya, Anda dapat memperkenalkan Anda tentang cara mengelola konfigurasi dalam aplikasi node.