pemrograman

02 Logger dan Leveling Logrus Pada Golang

Setelah pada artikel sebelumnya kita sudah membuat projek baru untuk mempelajari lebih dalam tentang Golang Logging, maka kita akan coba bagaimana log tersebut kita inisialisasi. Materi kali ini kita akan mencobanya menggunakan fungsi unit test sehingga kita lebih mudah untuk mendeklarasikannya.

Inisialisasi Logger

Maka, pertama kali buat file logger_test.go lalu isi file tersebut dengan dibawah ini.

func Test_Logger(t *testing.T) {
	logger := logrus.New()

	logger.Println("Halo this is log using logrus")
	logger.Infoln("hello this is log using logrus")
	fmt.Println("hello this is using print log")
}

Ketika file unit test tersebut dijalankan maka akan terlihat seperti dibawah ini.

=== RUN   Test_Logger
time="2024-04-21T08:57:59+07:00" level=info msg="Halo this is log using logrus"
time="2024-04-21T08:57:59+07:00" level=info msg="hello this is log using logrus"
hello this is using print log
--- PASS: Test_Logger (0.00s)
PASS
ok      github.com/santekno/learn-golang-logging        0.482s

Bisa kita lihat perbedaan mencetak suatu logging dengan print biasa terlihat ada beberapa fields tambahan yang menginformasikan tentang time, level dan message, menandakan bahwa setiap informasi yang dikeluarkan pada Logging ini, bisa terlihat waktu saat mencetak, level dari informasi yang ditampilkan sampai pesan yang ingin diinformasikan pada Logger.

Memahami Level Logging

Kita tahu pada saat melihat hasil dari materi diatas Logging menampilkan informasi Level. Apa itu level? Jadi level pada Logging itu sangat penting bahkan ini merupakan yang paling penting dalam mekanisme Logging. Level ini yang akan menentukan prioritas atau jenis dari suatu kejadian pada sistem atau service yang kita buat. Level ini terdiri dari beberapa titik dari mulai level terendah sampai level tertinggi.

Pada Logrus package ini sudah mendukung banyak sekali level bisa dilihat pada tabel dibawah ini.

NoLevelFunctionKeterangan
1Tracelogger.Trace()tracing sistem
2Debuglogger.Debug()debugging sistem
3Infologger.Info()informasi penting
4Warnlogger.Warn()informasi anomali
5Errorlogger.Error()informasi masalah terjadi
6Fatallogger.Fatal()panggil os.Exit(1) setelah log
7Paniclogger.Panic()panggil panic() setelah log

Pada tabel tersebut memiliki urutan semakin tinggi level terliat dari nomornya semakin memberikan informasi yang paling fatal atau semakin masalah pada sistem kita itu perlu diperhatikan atau bisa jadi perlu adanya perbaikan pada sistem. Maka saat kita menerapkan leveling Logger ini perlu diperhatikan mana yang membutuhkan level error,info,warning ataupun fatal karena ini bisa memberikan informasi kepada kita sebagai developer lebih memudahkan ketika kita tracing atau debugging permasalahan pada sistem.

Baiklah kita akan coba bagaimana membedakan dari tiap level dengan mencoba seperti pada kode dibawah ini.

package main

import (
	"testing"

	"github.com/sirupsen/logrus"
)

func TestLeveling(t *testing.T) {
	logger := logrus.New()

	logger.Trace("this is using trace level")
	logger.Debug("this is using debug level")
	logger.Info("this is using info level")
	logger.Warn("this is using warn level")
	logger.Error("this is using error level")
}

Pada kode diatas kita tidak menyertakan log fatal dan panic karena pada level tersebut sistem akan exit, maka kita akan test hanya sampai level error saja. Bisa kita lihat hasil setelah kita jalankan unit test pada TestLeveling akan terlihat dibawah ini.

=== RUN   TestLeveling
time="2024-04-21T09:22:38+07:00" level=info msg="this is using info level"
time="2024-04-21T09:22:38+07:00" level=warning msg="this is using warn level"
time="2024-04-21T09:22:38+07:00" level=error msg="this is using error level"
--- PASS: TestLeveling (0.00s)
PASS
ok      github.com/santekno/learn-golang-logging        0.396s

Terlihat bahwa informasi pada level trace dan debug tidak muncul atau tidak tercetak pada logger. Kenapa ini bisa terjadi? Karena pada Logging level ini ketika kita inisialisasi dengan memanggil

logger := logrus.New()

maka secara *default level yang digunakan adalah Info artinya hanya prioritas level info sampai ke atas saja yang akan dicetak pada log. Maka untuk menampilkan level sampai trace maka kita perlu mengubah logging level tersebut dengan menggunakan

logger.SetLevel(/* level yang akan dicetak */)

Kita tambahkan fungsi kode menjadi seperti ini. Dan jalankan ulang fungsi unit test dibawah ini.

func TestLeveling(t *testing.T) {
	logger := logrus.New()
	logger.SetLevel(logrus.TraceLevel)

	logger.Trace("this is using trace level")
	logger.Debug("this is using debug level")
	logger.Info("this is using info level")
	logger.Warn("this is using warn level")
	logger.Error("this is using error level")
}

Maka akan mencetak semua level logging dari mulai level trace sampai ke atasnya.

=== RUN   TestLeveling
time="2024-04-21T09:29:41+07:00" level=trace msg="this is using trace level"
time="2024-04-21T09:29:41+07:00" level=debug msg="this is using debug level"
time="2024-04-21T09:29:41+07:00" level=info msg="this is using info level"
time="2024-04-21T09:29:41+07:00" level=warning msg="this is using warn level"
time="2024-04-21T09:29:41+07:00" level=error msg="this is using error level"
--- PASS: TestLeveling (0.00s)
PASS
ok      github.com/santekno/learn-golang-logging        0.375s
comments powered by Disqus