Menambahkan log data dengan menggunakan Middleware di adonisJS

    Pembahasan kali ini, saya akan membahas mengenai middleware dan menambahkan log di middleware    dengan menggunakan adonisJS.

    Jadi, middleware adalah sebuah hook / penghubung, yang menghubungkan sebuah siklus request dari awal sampai akhir di aplikasi yang kita buat. Secara kasarnya, middleware adalah kumpulan dari fungsi yang dijalankan secara berurutan, dan fungsi yang dapat mengijinkan kita melakukan transformasi atau merubah isi dari request dan juga dari isi response.

    Lalu kenapa mau ditambahkan log di middleware? Ada kalanya kita ingin mengetahui sesuatu yang terjadi sebelum dan sesudah script dari aplikasi kita ketika di eksekusi. Apa yang dikirim (request) dan apa yang ditampilkan (response), atau mungkin bila teman-teman ingin merubah data dari request sebelum masuk ke sebuah fungsi di controller. Mungkin ada pertanyaan, lalu kenapa tidak di log di controller saja? kan sama saja toh? 

Untuk menjawab pertanyaan diatas, saya akan mengirimkan satu request melalui API endpoint yang saya buat, misalnya /home/index, dan saya mengirimkan data raw json seperti :
curl POST {
    "hello":"world"
}

    Tapi ternyata, di dalam controller home/index ini, terjadi kesalahan seperti kurang tanda kurung '()', dan sebagainya yang mengakibatkan internal server error 500, disini, teman-teman akan mulai bertanya, apa yang sebenarnya terjadi? Dan teman-teman juga akhirnya mulai ingin melakukan logging untuk request data apa yang dikirim oleh pengguna sebelum terjadinya error 500 ini, sehingga bisa dilakukan analisis di kemudian hari aapakah error terjadi karena kesalahan kecil seperti '()' atau karena data dari pengguna ada yang belum dapat diolah dengan benar oleh script teman-teman.

Disinilah Middleware melakukan sihirnya. Sesuai deskripsi, middleware adalah fungsi pertama yang mengirimkan request ke controller dan fungsi akhir yang menerima response. Jadi kalau ada yang perlu kita lacak, awalnya adalah di middleware ini. Jadi, tunggu apalagi? Yuk kita mulai cara membuat middlewarenya!

1. Di folder /App/Middleware, buat satu file apa saja, di saya, saya menamakannya LogMiddleware, didalam nya akan ada isian seperti berikut:
'use strict'

class LogMiddleware {
async handle ({request}, next) {
// before, ini adalah baris dimana script dijalankan sebelum dikirimkan ke controller
await next()
// after, ini adalah baris yang akan jalan setelah request dikirimkan

   }
}

module.exports = LogMiddleware


mari kita modifikasi seperti berikut:
'use strict'
use Log; // kita akan menginisiasi Log

class LoggerMiddleware {

async handle ({params, request, response}, next) {
// before
const Logger = use('Logger')
const startTime = microtime()
await next()

// after
const endTime = microtime()
let dataLog = ""

// dataLog += "\n". 'Time: ' + gmdate("F j, Y, g:i a") + "\n"
dataLog += "\nStart Data Log"
dataLog += "Duration: " + (endTime - startTime) + "\n"
dataLog += "IP Address: " + request.ip() + "\n"
dataLog += "Input POST: " + JSON.stringify(request.post() )+ "\n"
dataLog += "=========================================="

Logger.info(dataLog);
}
}

module.exports = LoggerMiddleware


dari contoh diatas, saya membuat middleware untuk melakukan log benchmark, dan mencatat request apa yang dikirimkan dengan metode POST, beserta ip address yang melakukan request tersebut. Teman-teman bisa meng-log apapun berdasarkan variable params, request, response dari fungsi, seperti yang saya gunakan diatas. 

Selamat berkreasi! Ingat, aplikasi yang baik, mampu mencatat semua histori / aktivity untuk dijadikan sebagai bahan analisis data di kemudian hari. 




Comments

Popular posts from this blog

Product Manager - Apa, Siapa & Bagaimana?

Upgrading Python version di Mac OS

Data Science - Pengenalan