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.
No | Level | Function | Keterangan |
---|---|---|---|
1 | Trace | logger.Trace() | tracing sistem |
2 | Debug | logger.Debug() | debugging sistem |
3 | Info | logger.Info() | informasi penting |
4 | Warn | logger.Warn() | informasi anomali |
5 | Error | logger.Error() | informasi masalah terjadi |
6 | Fatal | logger.Fatal() | panggil os.Exit(1) setelah log |
7 | Panic | logger.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