Single All 26 Agustus 2018 5 min

Tutorial Offline Log di Node JS + Express dengan Library Winston

Cara mudah membuat log dengan winston di Node JS + Express

Tutorial Offline Log di Node JS + Express dengan Library Winston

Cara mudah membuat log dengan winston di Node JS + Express

Image Hello folks! Pada kesempatan kali ini gue mau ngebahas tentang log di Node JS dengan winston. Lo semua pasti udah pada tau kan di Node JS kita dengan mudah dapat melakukan logging pada setiap development hanya dengan command seperti ini

console.log("Shit error!");console.log(error);

Nah nanti ketika terjadi error kita dapat melihat error yang terjadi pada terminal console di local development kita. Tapi tau gak bro kalo Node JS udah di deploy ke server dan saat terjadi error, kita gabisa nangkep error tersebut. Kenapa? ya karena engga ada log untuk ditampilkan. Emangnya kita bisa ngecekkin log dengan cara mantau ke server? hahaha Nah solusinya adalah kita harus ngebuat file offline log, di Node JS kebetulan ada library namanya Winston. Nah dengan Winston ini kita dapat melihat file log kita secara offline + saat error di development. Jadi kalo nanti ada error saat di deploy ke server, as example ada query exception lo salah nama kolom atau nama table nah si Winston ini akan generate file offline dimana lo bisa ngebaca error apa yang terjadi. Ya mirip-mirip Log nya si laravel sih, enak ya laravel mah udah dibuatin, lah ini kudu ribet dulu wkwkwk gapapa deh yang penting belajar bro.

{"code":"ER_BAD_FIELD_ERROR","errno":1054,"sqlMessage":"Unknown column 'person' in 'where clause'","sqlState":"42S22","index":0,"sql":"SELECT * FROM user WHERE person = 'Kiddy'","level":"error"}

Nah diatas adalah contoh hasil generate offline logs dari si Winston, enak loh ini ngebantu kalian banget kalo udah deploy si Node JS ke server. Oke langsung to the point aja. Pertama, kita install dulu si library-nya

npm install winston --save

Kedua, kita buat dua folder baru di root folder, kasih nama config dan logs. Ketiga, kita install dulu app root path. Gunanya apa? supaya ini ngebantu si Winston dalam nemuin Root path di Node js lo men, kita gaperlu repot-repot gini ‘../../Library’ ahahaha 😂 🤣

npm install app-root-path --save

Keempat, buat file di folder config, kasih namawinston.js. Ini adalah file konfigurasi si winston supaya kita makin gampang manggilnya.

var appRoot = require('app-root-path');var winston = require('winston');// Gunanya buat nyetting log yang akan dikeluarin, baik itu ke file berupa output maupun console terminalvar options = {file: {level: 'info',filename: `${appRoot}/logs/your-app.log`,handleExceptions: true,json: true,maxsize: 5242880, //ukuran file maksimal 5MBmaxFiles: 5,colorize: false,},console: {level: 'debug',handleExceptions: true,json: false,colorize: true,},};// Panggil class si winston dengan setting yang udah kita buatvar logger = winston.createLogger({transports: [new winston.transports.File(options.file),new winston.transports.Console(options.console)],exitOnError: false, // Aplikasi gabakalan berhenti kalo ada exception});// Bikin file stream (nulis file) yang dimana bakalan dipake sama morgan (sm*ash) ups hahaha.`logger.stream = {write: function(message, encoding) {// pake log level info aja supaya outputnya dipake sama file stream dan console.logger.info(message);},};module.exports = logger;

oke sekarang settingannya udah ok. Sekarang kita tinggal panggil file si winston js dengan cara gini.

varlog = require('../config/winston');
try{// Code}catch(e){log.error(e)}

Nah sekarang kalian coba buat error dengan cara misal kurang variable, atau salah namain variable, atau salah panggil table atau salah panggil kolom di table. Cek keroot_folder/logs/your-app.logdisana akan ada log berupa errornya aplikasi kalian. Contoh outputnya ya dibawah ini

{"code":"ER_BAD_FIELD_ERROR","errno":1054,"sqlMessage":"Unknown column 'person' in 'where clause'","sqlState":"42S22","index":0,"sql":"SELECT * FROM user WHERE person = 'Kiddy'","level":"error"}

Log juga akan muncul di terminal console, so gaperlu lagi pake console log. Violaaa sudah selesai deh. Semoga bermanfaat!

Artikel ini merupakan konten legacy dari blog Medium (Tahun 2018). Beberapa konsep atau sintaks mungkin sudah mengalami perubahan pada versi terbaru.