Logging adalah teknik menyimpan catatan untuk tujuan masa depan dalam siklus pengembangan perangkat lunak. Pencatatan log sangat penting karena log membantu proses debug, diagnostik, pemecahan masalah, dan pemantauan proyek.

Anda dapat menggunakan logging di berbagai tingkat aplikasi Anda untuk kesalahan, peringatan, debugging, dan banyak lagi.

Masuk Go

Perpustakaan standar Go mengandung catatan paket kaya fungsionalitas. Ini menangani berbagai level logging dan metode dasar terkait logging yang Anda perlukan untuk aplikasi Anda. Namun, catatan package mungkin bukan pilihan terbaik jika aplikasi Anda kompleks dan Anda ingin memprioritaskan produktivitas.

Itu catatan package tidak menyediakan fungsionalitas untuk log terstruktur. Paket logging terstruktur menyediakan fungsionalitas yang menyederhanakan dan meningkatkan proses logging. Ekosistem Go adalah rumah bagi banyak paket seperti itu.

1. Zap oleh Uber

Pertengkaran adalah paket logging yang cepat, terstruktur, dan bertingkat yang dibuat oleh tim sumber terbuka Uber untuk menulis log di Go. Uber membangun paket Zap untuk menyediakan logging yang lebih berkinerja daripada paket lain di ekosistem Go, termasuk

instagram viewer
catatan kemasan.

Ada dua logger berbeda dalam paket Zap. Itu Pencatat fungsi menangani kasus kinerja kritis. Itu SugaredLogger menawarkan lebih banyak fleksibilitas dengan API gaya printf, tetapi ia hadir dengan sedikit pengorbanan dalam kinerja. Bahkan paket SugaredLogger yang lebih lambat 4-10 kali lebih cepat daripada paket logging terstruktur lainnya.

Jalankan yang berikut ini pada baris perintah untuk menginstal paket Zap:

Pergilah dapatkan -u Pergilah.uber.org/zap

Anda memerlukan Go versi terbaru untuk menginstal dan menggunakan fungsionalitas paket Zap dengan sukses.

logger, err := zap. Produksi Baru() // contoh pencatat zap

jika salah != nol {
fmt. Cetak (err. Kesalahan())
}

menunda penebang kayu. Sinkronkan() // menghapus buffer, jika ada
gula := pencatat. Gula() //pencatat gula di sini

Gula. Infow("gagal mengambil URL",
// Konteks terstruktur sebagai pasangan nilai kunci yang diketik secara longgar.
"url", url,
"percobaan", 3,
"mundur", waktu. Kedua,
)

Gula. Infof("Gagal mengambil URL: %s", URL) // menggunakan formatter gaya printf

Itu pencatat variabel adalah turunan dari pertengkaran pencatat, dan Gula metode adalah contoh logger bergula.

Itu Info metode menulis ke output, dan Info adalah versi pemformatan dari Info metode.

2. Paket Logrus

Logrus adalah paket logging terstruktur untuk aplikasi Go. Logrus kompatibel dengan logger perpustakaan standar, dengan fungsi serupa. Jika Anda memiliki pengalaman menggunakan catatan paket, Anda akan menemukan suite yang bekerja dengan Logrus.

Logrus tidak mendukung pemformatan JSON secara default. Tetapi Anda selalu dapat menggunakan perpustakaan JSON seperti bawaan json paket dengan Logrus ' SetFormatter metode.

Logrus mendukung logging pada level yang berbeda dan, meskipun tidak berkinerja seperti kebanyakan paket logging, itu kaya fitur dan aman.

Anda dapat menggunakan perintah ini untuk menginstal Logrus di direktori kerja Anda:

Pergilah dapatkan github.com/sirupsen/logrus

Berikut adalah contoh logging dengan paket Logrus.

impor (
"oh"
log "github.com/sirupsen/logrus" // alias impor
)

fungsiutama {
catatan. SetFormatter(&log. JSONFormatter{}) // setel pemformat ke JSON
catatan. SetOutput (os. gagah) // keluaran ke keluaran standar
catatan. SetLevel (log. Tingkat Peringatan) // setel tingkat peringatan

catatan. WithFields (log. Bidang{
"Nama": "John Doe",
"Usia": 40,
}).Info("Data Bio John")
}

Kode ini mengimpor perpustakaan Logrus dan membuat alias untuknya bernama catatan. Dalam utama fungsi, itu memanggil SetFormatter metode untuk mengatur formatter untuk log. Anda dapat menggunakan Setel Keluaran metode untuk menentukan ke mana pesan log harus pergi; dalam hal ini, keluaran standar.

Itu SetLevel metode mencatat peringatan di level yang ditentukan atau di atasnya.

3. Paket ZeroLog

NolLog adalah perpustakaan khusus JSON yang terinspirasi Zap, cepat, untuk logging, dirancang untuk kinerja. Ini menggunakan API rantai unik yang memungkinkan Zerolog untuk menulis JSON dan mencatat peristiwa tanpa alokasi dan refleksi.

Zerolog bertujuan untuk menyediakan API yang lebih mudah digunakan dan kinerja yang lebih tinggi sambil menjaga basis kode dan API tetap sederhana. Ini berfokus pada logging terstruktur dan Anda dapat menggunakan Penulis Konsol metode untuk cukup masuk di konsol Anda.

Ada alokasi rendah, logging yang diratakan, pengambilan sampel, kait, bidang kontekstual, dan logging kesalahan dengan fitur pelacakan tumpukan opsional pada paket Zerolog. Anda juga dapat mengintegrasikan Zerolog dengan konteks dan http paket.

Jalankan perintah ini di terminal ruang kerja Anda untuk menginstal Zerolog kemasan.

Pergilah dapatkan -u [github.com/rs/zerolog/log](http://github.com/rs/zerolog/log)

Berikut adalah contoh sederhana menggunakan paket Zerolog untuk operasi sederhana.

impor (
"github.com/rs/zerolog" // zerolog untuk konfigurasi
"github.com/rs/zerolog/log" // masuk untuk masuk
)

fungsiutama() {
// Waktu UNIX lebih cepat dan lebih kecil daripada kebanyakan cap waktu
nollog. TimeFieldFormat = zerolog. TimeFormatUnix

catatan. Cetak("halo dunia")
}

Itu Format Bidang Waktu opsi diatur ke format waktu Unix, dan Mencetak perintah menulis argumen teks ke output standar.

4. Paket Log15

Itu Log15 package adalah toolkit opini sederhana untuk logging yang dapat dibaca manusia dan mesin dengan praktik terbaik di Go. Log15 memodelkan io dan http paket dari perpustakaan standar Go sebagai alternatif dari bawaan catatan kemasan.

Fitur dari paket Log15 meliputi:

  • API yang sederhana dan mudah dipahami
  • logging terstruktur dengan pasangan nilai kunci
  • penebang anak dengan konteks pribadi
  • antarmuka handler untuk membuat konfigurasi logging kustom melalui API kecil
  • dukungan terminal berwarna
  • dukungan bawaan untuk masuk ke file, aliran, log sistem, dan log jaringan
  • buffering catatan ke output.

Anda dapat menginstal Log15 ke paket Go Anda dengan perintah ini.

Pergilah dapatkan github.com/inconshreveable/log15

Sangat mudah untuk memulai dengan paket Log15. Berikut adalah contoh instantiating logger dan login info dan tingkat kesalahan dengan paket.

impor (
log "github.com/inconshreveable/log15" // alias impor sebagai log
)

fungsiutama() {
serverLog := log. Baru("repositori", "baru gudang") // membuat instance logger
serverLog. Info("pemeriksaan kesehatan lapisan repositori berhasil") // log info
serverLog. Kesalahan("pemeriksaan kesehatan lapisan repositori gagal") // catatan eror
}

Itu serverLog variabel adalah turunan dari logger Log15; itu Baru metode mengembalikan logger dengan argumen konteks yang Anda berikan.

Itu Info metode mengembalikan pesan info, dan Kesalahan metode mengembalikan pesan kesalahan.

Tulis Log yang Berguna dan Dapat Dimengerti

Logging bisa sama pentingnya dengan bagian lain dari proses pengembangan. Ini mungkin tampak sangat mudah pada tahap awal, tetapi berpegang teguh pada praktik penting dapat memperumit prosesnya. Untuk menangani setiap kasus tepi dan aspek logging, Anda harus menggunakan paket logging untuk mempermudah.

Gunakan tingkat logging, struktur, dan konteks untuk membuat log Anda dapat dimengerti dan sesuai dengan tujuan yang dimaksudkan.