9 Perpustakaan Node.js Logger yang Dapat Anda Coba untuk Logging yang Lebih Baik
Diterbitkan: 2022-09-01Apakah Anda kesulitan men-debug kode Anda? Apakah Anda mencari beberapa solusi logging yang mungkin membuat debugging lebih mudah? Baca terus untuk mempelajari lebih lanjut.
Pengembangan perangkat lunak melewati beberapa fase: pengumpulan kebutuhan, analisis, pengkodean, pengujian, dan pemeliharaan. Dari semua fase ini, fase pengkodean/pengembangan membutuhkan banyak waktu dan usaha. Insinyur perangkat lunak menangani kesalahan sintaks, kesalahan logis, dan kesalahan runtime. Kesalahan sintaksis diidentifikasi pada waktu kompilasi dan terjadi karena kode tidak mematuhi aturan bahasa pemrograman.

Di sisi lain, kesalahan logis dan run-time tidak dapat diidentifikasi oleh Integrated Development Environment (IDE) dan seringkali sulit untuk di-debug dan diperbaiki. Menyelesaikan bug adalah proses yang memakan waktu dan membutuhkan banyak debug.
Debugging adalah proses di mana seseorang mencoba memahami mengapa kode yang ditulis tidak berfungsi seperti yang diharapkan. Sangat mudah untuk memecahkan masalah ketika kita mengetahui kesalahan dan baris yang tepat dalam kode di mana itu terjadi. Oleh karena itu, logging sangat berguna untuk men-debug kode.
Apa itu Pencatatan?
Logging adalah teknik di mana pesan ditangkap selama eksekusi program. Seseorang harus mencatat hanya pesan-pesan itu, yang dapat membantu mereka dalam debugging. Jadi, mengetahui kapan harus menambahkan pernyataan log ke kode sangat penting. Juga, membedakan antara pernyataan log sama pentingnya. Ada berbagai level dalam logging, seperti info, warn, error, debug, dan verbose. Pernyataan kesalahan dan peringatan digunakan untuk penanganan pengecualian.

Data yang dikembalikan dari fungsi, hasil setelah manipulasi array, data yang diambil dari API, dll., adalah beberapa contoh data yang dapat dicatat menggunakan pernyataan info. Log debug dan verbose digunakan untuk memberikan penjelasan rinci tentang kesalahan.
Log debug memberikan informasi tentang jejak tumpukan, parameter input-output, dll. "Verbose" tidak sedetail log "debug" tetapi memberikan daftar semua peristiwa yang telah terjadi. Log ditulis ke konsol, file, dan aliran keluaran. Alat manajemen log dapat digunakan untuk logging terstruktur dan terformat.
Pencatatan Node.js
Nodejs adalah lingkungan runtime javascript. Aplikasi Node.js tidak sinkron dan non-blocking, dan digunakan dalam sistem data-intensif dan real-time. Cara terbaik untuk mempelajari lebih lanjut tentang Node.js adalah melalui tutorial Node.js dan dokumentasinya. Logging diperlukan untuk meningkatkan kinerja, pemecahan masalah, dan pelacakan kesalahan. Masuk ke Node.js dapat dilakukan menggunakan fungsi bawaan console.log. Juga, fungsi debug saling terkait dengan beberapa paket dan dapat digunakan secara efektif.
Middleware digunakan untuk mengelola permintaan dan tanggapan. Middleware bisa berupa aplikasi atau framework Javascript lainnya. Logging di middleware dapat dilakukan melalui aplikasi dan router. Setiap logger Node.js harus menggunakan perintah npm atau yarn install untuk menginstal logger.
Npm adalah singkatan dari "Node Package Manager," dan YARN adalah singkatan dari "Yet Another Resource Negotiator". Namun, Yarn lebih disukai daripada npm karena lebih cepat dan menginstal paket secara paralel.

Beberapa logger Node.js terbaik tercantum di bawah ini:
pino
Pino adalah library yang merupakan salah satu logger terbaik untuk aplikasi Node.js. Ini adalah open source, sangat cepat, dan mencatat pernyataan dalam format JSON yang mudah dibaca. Beberapa level log Pino adalah – pesan debug, peringatan, kesalahan, dan info. Instance logger Pino dapat diimpor ke proyek, dan pernyataan console.log harus diganti dengan pernyataan logger.info.
Gunakan perintah berikut untuk menginstal Pino:
$ npm install pino
Log yang dihasilkan rumit dan dalam format JSON, menyoroti nomor baris log, jenis log, waktu log, dll. Pino menyebabkan pencatatan overhead minimal dalam aplikasi dan sangat fleksibel saat memproses log.
Pino dapat diintegrasikan dengan kerangka kerja web seperti Hapi, Restify, Express, dll. Log yang dihasilkan oleh Pino juga dapat disimpan dalam file. Ini menggunakan utas Pekerja untuk operasi dan kompatibel dengan TypeScript.
Winston
Winston mendukung logging untuk berbagai kerangka kerja web dengan fokus utamanya pada fleksibilitas dan ekstensibilitas. Ini mendukung berbagai jenis transportasi dan dapat menyimpan log di berbagai lokasi file. Transports adalah tempat di mana pesan log disimpan.
Bersama dengan beberapa transport bawaan seperti Http, Console, File, dan Stream, ini mendukung transport lain seperti Cloud watch dan MongoDB. Itu masuk di bawah berbagai level dan format. Tingkat logging menunjukkan tingkat keparahan masalah.
Berbagai tingkat logging adalah seperti yang ditunjukkan di bawah ini:
{ error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }
Format output log dapat dikustomisasi, difilter, dan digabungkan juga. Log mencakup informasi tentang stempel waktu, label yang terkait dengan log, milidetik berlalu dari log sebelumnya, dll.
Winston juga menangani pengecualian dan janji yang tidak tertangkap. Ini menyediakan fitur tambahan seperti pengarsipan runtime kueri, log streaming, dll. Pertama, kita harus menginstal Winston. Kemudian, objek konfigurasi Winston, bersama dengan transport, dibuat untuk menyimpan log. Objek logger dibuat menggunakan fungsi createLogger(), dan pesan log diteruskan ke sana.
Node-Bunyan
Bunyan digunakan untuk login cepat di node.js dalam format JSON. Ini juga menyediakan alat CLI (Command Line Interface) untuk melihat log. Ini ringan dan mendukung berbagai lingkungan runtime seperti Node.js, Browserify, WebPack, dan NW.js. Format JSON dari log semakin dipercantik menggunakan fungsi pencetakan cantik. Log memiliki berbagai level seperti fatal, error, warning, info, debug, dan trace; masing-masing dikaitkan dengan nilai numerik.

Semua level di atas level yang ditetapkan untuk instance dicatat. Aliran bunyan adalah tempat di mana output dicatat. Subkomponen aplikasi dapat dicatat menggunakan fungsi log.child(). Semua pencatat anak terikat pada aplikasi induk tertentu. Jenis aliran bisa berupa file, file berputar, data mentah, dll. Contoh kode untuk mendefinisikan aliran ditunjukkan di bawah ini:
var bunyan = require('bunyan'); var log = bunyan.createLogger({ name: "foo", streams: [ { stream: process.stderr, level: "debug" }, ... ] });
Bunyan juga mendukung DTrace logging. Probe yang terlibat dalam DTrace logging termasuk log-trace, log-warn, log-error, log-info, log-debug, dan log-fatal. Bunyan menggunakan serializer untuk menghasilkan log dalam format JSON. Fungsi serializer tidak membuang pengecualian dan bersifat defensif.

tingkat log
Loglevel digunakan untuk masuk ke aplikasi Javascript. Ini juga salah satu logger terbaik Node.js karena ringan dan sederhana. Ini mencatat level yang diberikan dan menggunakan satu file tanpa ketergantungan untuk masuk. Level log default adalah "peringatkan." Keluaran log diformat dengan baik bersama dengan nomor baris. Beberapa metode yang digunakan untuk logging adalah trace, debug, warning, error dan info.
Mereka tahan terhadap kegagalan di lingkungan apa pun. getLogger() adalah metode yang digunakan untuk mengambil objek logger. Itu dapat dikombinasikan dengan plugin lain juga untuk memperluas fitur-fiturnya. Beberapa plugin termasuk loglevel-plugin-prefix, loglevel-plugin-remote, ServerSend, dan DEBUG. Plugin untuk menambahkan pesan awalan ke logging ditunjukkan di bawah ini:
var originalFactory = log.methodFactory; log.methodFactory = function (methodName, logLevel, loggerName) { var rawMethod = originalFactory(methodName, logLevel, loggerName); return function (message) { rawMethod("Newsflash: " + message); }; }; log.setLevel(log.getLevel()); // Be sure to call setLevel method in order to apply plugin
Build dijalankan menggunakan perintah npm run dist, dan pengujian dapat dijalankan menggunakan perintah npm test. Level log mendukung paket Webjar, Bower, dan Atmosphere. Versi baru Loglevel dirilis setiap kali fitur baru ditambahkan.
sinyal
Signale terdiri dari 19 logger untuk aplikasi Javascript. Ini mendukung TypeScript dan logging cakupan. Ini terdiri dari penghitung waktu yang membantu mencatat cap waktu, data, dan nama file. Terlepas dari 19 logger seperti menunggu, lengkap, fatal, fav, info, dll, seseorang dapat membuat log khusus.
Log khusus dibuat dengan mendefinisikan objek dan bidang JSON dengan data logger. Logger interaktif juga dapat dibuat. Ketika logger interaktif disetel ke true, nilai baru dari logger interaktif menggantikan yang lama.

Bagian terbaik dari Signale adalah kemampuannya untuk menyaring informasi rahasia atau sensitif. Beberapa rahasia disimpan dalam array. addSecrets() dan clearSecrets() adalah fungsi yang digunakan untuk menambahkan dan menghapus rahasia dari array. Boostnote, Docz, Shower, Taskbook, dan Vant menggunakan Signale untuk logging. Sintaks untuk memanggil API dari Signale adalah sebagai berikut:
signale.<logger>(message[,message]|messageObj|errorObj)
Jumlah unduhan Signale lebih dari 1 juta pada saat penulisan artikel ini.
Pengusut
Tracer digunakan untuk menghasilkan pesan logging rinci. Pesan logging terdiri dari stempel waktu, nama file, nomor baris, dan nama metode. Paket pembantu dapat diinstal untuk menyesuaikan format pencatatan keluaran. Paket pembantu dapat diinstal menggunakan perintah berikut.
npm install -dev tracer
Tracer mendukung file, streaming, dan transportasi MongoDB. Ini mendukung konsol warna dan kondisi filter dalam logging. Awalnya, pelacak harus diinstal menggunakan npm install. Kedua, objek logger harus dibuat, dan jenis konsol harus dipilih. Kemudian, berbagai level atau tipe log dapat ditentukan di atas objek untuk logging lebih lanjut.
Filter yang disesuaikan dapat dibuat dengan mendefinisikan fungsi sinkron dengan logika bisnis yang ada di badan fungsi. Template mikro seperti tinytim juga dapat digunakan untuk pencatatan sistem.
Kabin.js
Kabin digunakan untuk pencatatan server dan sisi klien dari aplikasi node.js. Ini digunakan di mana penyamaran informasi sensitif dan kritis diperlukan. Ini termasuk nomor kartu kredit, BasicAuth Header, garam, kata sandi, token CSRF, dan nomor rekening bank. Cuplikan kode di bawah ini menunjukkan logging menggunakan Cabin.js.
const Cabin = require('cabin'); const cabin = new Cabin(); cabin.info('hello world'); cabin.error(new Error('oops!'));
Ini terdiri dari lebih dari 1600 nama bidang. Ini juga mengikuti prinsip Bring Your Own Logger (BYOL). Ini membuatnya kompatibel dengan berbagai logger lain seperti Axe, Pino, Bunyan, Winston, dll. Ini mengurangi biaya penyimpanan dalam disk karena aliran otomatis dan buffer Kabin. Ini kompatibel lintas platform dan mudah di-debug.
Pencatatan sisi server memerlukan penggunaan middleware untuk perutean dan pencatatan keluaran otomatis. Logging sisi browser memerlukan permintaan dan skrip XHR. Ini menggunakan Axe yang menampilkan metadata, yaitu, data tentang data, jejak tumpukan, dan kesalahan lainnya. SHOW_STACK dan SHOW_META adalah variabel boolean yang disetel ke true atau false untuk menampilkan atau menyembunyikan jejak tumpukan dan metadata.
Npmlog
Npmlog adalah tipe dasar logger yang digunakan npm. Beberapa metode logging yang digunakan adalah level, record, maxRecordSize, prefixStyle, heading, dan stream. Ini juga mendukung logging berwarna. Berbagai level logging konyol, verbose, info, warn, http, dan error. Cuplikan kode sampel untuk menggunakan log npm ditunjukkan di bawah ini.
var log = require('npmlog') // additional stuff ---------------------------+ // message ----------+ | // prefix ----+ | | // level -+ | | | // vvvv log.info('fyi', 'I have a kitty cat: %j', myKittyCat)
Semua pesan disembunyikan jika "Infinity" ditetapkan sebagai level log. Jika “-Infinity” ditetapkan sebagai level log, opsi untuk melihat pesan logging harus diaktifkan untuk melihat log.
Event dan objek pesan digunakan untuk logging. Pesan awalan dipancarkan saat kejadian awalan digunakan. Objek gaya digunakan untuk memformat log, seperti menambahkan warna ke teks dan latar belakang, gaya font seperti tebal, miring, garis bawah, dll. Beberapa paket npm log adalah brolog, npmlogger, npmdate log, dll.
mengaum
Roarr adalah logger untuk Node.js yang tidak memerlukan inisialisasi dan menghasilkan data terstruktur. Ini memiliki variabel CLI dan lingkungan. Ini kompatibel dengan browser. Dapat diintegrasikan dengan Fastify, Fastify, Elastic Search, dll. Dapat membedakan antara kode aplikasi dan kode ketergantungan. Setiap pesan log terdiri dari konteks, pesan, urutan, waktu, dan versi. Berbagai tingkat log termasuk jejak, debug, info, peringatan, kesalahan, dan fatal. Contoh cuplikan kode tentang bagaimana logging dilakukan adalah Roarr adalah sebagai berikut:
import { ROARR, } from 'roarr'; ROARR.write = (message) => { console.log(JSON.parse(message)); };
Juga, serialisasi kesalahan dapat dilakukan, artinya instance dengan kesalahan dapat dicatat bersama dengan konteks objek. Beberapa variabel lingkungan yang khusus untuk Node.js dan Roarr adalah ROARR_LOG dan ROARR_STREAM. “adopt” adalah fungsi yang digunakan dengan node.js untuk menurunkan properti konteks ke berbagai level. Fungsi anak dapat digunakan dengan middleware juga, saat logging.
Kata-kata Terakhir
Logging adalah metode untuk melacak berbagai kegiatan dan peristiwa selama pelaksanaan program. Logging memainkan peran penting dalam debugging kode. Ini juga membantu dalam meningkatkan keterbacaan kode. Node.js adalah open-source, lingkungan waktu berjalan javascript. Beberapa logger Node.js terbaik adalah Pino, Winston, Bunyan, Signale, Tracer, Npmlog, dll. Setiap jenis logger memiliki fitur sendiri seperti profiling, filtering, streaming, dan transportasi.
Beberapa logger mendukung konsol berwarna, dan beberapa cocok untuk menangani informasi sensitif. Log yang terperinci dan diformat sangat membantu pengembang saat mereka mencoba memperbaiki bug dalam kode mereka. Format JSON umumnya lebih disukai untuk logging karena mencatat data dalam bentuk pasangan nilai kunci sehingga mudah digunakan.
Logger juga dapat diintegrasikan dengan aplikasi lain dan kompatibel dengan multi-browser. Selalu disarankan untuk melihat kebutuhan dan aplikasi yang Anda buat sebelum memilih jenis logger yang ingin Anda gunakan.
Anda juga dapat melihat cara menginstal Node.js dan NPM di Windows dan macOS.