Tutorial Offline Log di Node JS + Express dengan Library Winston

Hudya
3 min readAug 26, 2018

--

Cara mudah membuat log dengan winston di Node JS + Express

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 nama winston.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 terminal
var options = {
file: {
level: 'info',
filename: `${appRoot}/logs/your-app.log`,
handleExceptions: true,
json: true,
maxsize: 5242880, //ukuran file maksimal 5MB
maxFiles: 5,
colorize: false,
},
console: {
level: 'debug',
handleExceptions: true,
json: false,
colorize: true,
},
};

// Panggil class si winston dengan setting yang udah kita buat
var 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.

var log = 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 ke root_folder/logs/your-app.log disana 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!

--

--

Hudya
Hudya

Written by Hudya

Which is more difficult, coding or counting? Not both of them, the difficult one is sharing your knowledge to people without asking the payment.

No responses yet