Günlük kaydı, yazılım geliştirme döngüsünde gelecekteki amaçlar için kayıt tutma tekniğidir. Günlükler hata ayıklama, tanılama, sorun giderme ve proje izleme konularında yardımcı olduğu için günlük kaydı önemlidir.
Hatalar, uyarılar, hata ayıklama ve daha fazlası için uygulamalarınızın çeşitli düzeylerinde günlüğe kaydetmeyi kullanabilirsiniz.
Giriş Yap
Go standart kitaplığı içerir kayıt işlevsellik açısından zengin bir paket. Uygulamanız için ihtiyaç duyacağınız çeşitli günlük kaydı düzeylerini ve günlük kaydıyla ilgili temel yöntemleri yönetir. Ancak kayıt Uygulamanız karmaşıksa ve üretkenliğe öncelik vermek istiyorsanız, paket en iyi seçenek olmayabilir.
bu kayıt paket, yapılandırılmış günlükler için işlevsellik sağlamaz. Yapılandırılmış günlüğe kaydetme paketleri, günlüğe kaydetme sürecini basitleştiren ve iyileştiren işlevsellik sağlar. Go ekosistemi, bu tür birçok pakete ev sahipliği yapmaktadır.
1. Uber tarafından Zap
Zap Uber'in açık kaynak ekibi tarafından Go'da günlük yazmak için oluşturulmuş hızlı, yapılandırılmış, seviyeli bir günlük paketidir. Uber Zap paketini Go ekosistemindeki diğer paketlerden daha performanslı günlük kaydı sağlamak için oluşturdu.
kayıt paket.Zap paketinde iki farklı kaydedici vardır. bu Ağaç kesicisi işlevi kritik performans durumlarını işler. bu SugaredLogger printf tarzı API ile daha fazla esneklik sunar, ancak performansta küçük bir ödünleşim ile birlikte gelir. Daha yavaş SugaredLogger paketi bile diğer yapılandırılmış günlük paketlerinden 4-10 kat daha hızlıdır.
Zap paketini kurmak için komut satırında aşağıdakileri çalıştırın:
Git anladım Git.uber.org/zap
Zap paketinin işlevselliğini başarılı bir şekilde kurmak ve kullanmak için Go'nun yeni bir sürümüne ihtiyacınız olacak.
kaydedici, hata := zap. YeniÜretim() // zap günlükçü örneği
eğer hata != sıfır {
fmt. Println (hata. Hata())
}ertelemek ağaç kesicisi. Senkronizasyon() // varsa arabellekleri temizler
şeker := kaydedici. Şeker() // şekerli kaydedici buradaŞeker. Infow("URL getirilemedi",
// Gevşek yazılmış anahtar/değer çiftleri olarak yapılandırılmış bağlam.
"url", url,
"teşebbüs", 3,
"geri çekilme", zaman. İkinci,
)
Şeker. Infof("URL getirilemedi: %s", URL) // printf stili biçimlendiriciyi kullanma
bu ağaç kesicisi değişken bir örneğidir zap kaydedici ve Şeker yöntem, şekerli bir günlükçü örneğidir.
bu bilgi yöntem çıktıya yazar ve bilgi biçimlendirme sürümüdür bilgi yöntem.
2. Logrus Paketi
Logrus Go uygulamaları için yapılandırılmış bir günlük kaydı paketidir. Logrus, benzer işlevselliğe sahip standart kütüphane kaydedici ile uyumludur. kullanma deneyiminiz varsa, kayıt paketinde Logrus ile çalışan bir paket bulacaksınız.
Logrus, varsayılan olarak JSON biçimlendirmesini desteklemez. Ancak her zaman yerleşik gibi bir JSON kitaplığı kullanabilirsiniz. json Logrus'lu paket SetFormatter yöntem.
Logrus, farklı seviyelerde günlüğe kaydetmeyi destekler ve çoğu günlük kaydı paketi kadar performanslı olmasa da, zengin özelliklere sahip ve güvenlidir.
Logrus'u çalışma dizininize kurmak için bu komutu kullanabilirsiniz:
Git github.com/sirupsen/logrus'u edinin
İşte Logrus paketi ile günlüğe kaydetme örneği.
içe aktarmak (
"işletim sistemi"
"github.com/sirupsen/logrus" günlüğü // takma ad içe aktarma
)işlevana {
kayıt. SetFormatter(&log. JSONFormatter{}) // biçimlendiriciyi JSON olarak ayarla
kayıt. SetOutput (os. Stdout) // standart çıktıya çıktı
kayıt. SetLevel (günlük. WarnLevel) // uyarı seviyesini ayarla
kayıt. WithFields (günlük. Alanlar{
"Ad": "John Doe",
"Yaş": 40,
}).Info("John's Bio Data")
}
Bu kod, Logrus kitaplığını içe aktarır ve onun için bir takma ad oluşturur. kayıt. İçinde ana işlevini çağırır SetFormatter günlükler için bir biçimlendirici ayarlama yöntemi. kullanabilirsiniz SetOutput günlük mesajlarının nereye gideceğini belirleme yöntemi; bu durumda, standart çıktı.
bu Seviye Ayarla method, uyarıları belirtilen düzeyde veya daha üstte günlüğe kaydeder.
3. Sıfır Günlük Paketi
Sıfır Günlük performans için tasarlanmış, günlük kaydı için Zap'ten ilham alan, hızlı, JSON'a özel bir kitaplıktır. Zerolog'un JSON yazmasına ve olayları ayırma ve yansıma olmadan kaydetmesine izin veren benzersiz bir zincirleme API kullanır.
Zerolog, kod tabanını ve API'yi basit tutarken kullanımı daha kolay bir API ve daha yüksek performans sağlamayı amaçlamaktadır. Yapılandırılmış günlüğe kaydetmeye odaklanır ve Konsol Yazarı konsolunuzda güzel oturum açma yöntemi.
Zerolog paketinde isteğe bağlı yığın izleme özellikleriyle düşük ayırma, seviyeli günlük kaydı, örnekleme, kancalar, bağlamsal alanlar ve hata günlüğü vardır. Zerolog'u aşağıdakilerle de entegre edebilirsiniz: bağlam ve http paketler.
Yüklemek için bu komutu çalışma alanınızın terminalinde çalıştırın. sıfır günlük paket.
Git get -u [github.com/rs/zerolog/log](http://github.com/rs/zerolog/log)
İşte basit bir işlem için Zerolog paketini kullanmanın basit bir örneği.
içe aktarmak (
"github.com/rs/zerolog" // yapılandırmalar için sıfır günlüğü
"github.com/rs/zerolog/log" // log için log
)işlevana() {
// UNIX Zamanı çoğu zaman damgasından daha hızlı ve daha küçüktür
sıfır günlük. TimeFieldFormat = sıfır günlük. ZamanBiçimiUnix
kayıt. Yazdır ("merhaba dünya")
}
bu Zaman Alanı Biçimi seçeneği Unix saat biçimine ayarlanmıştır ve Yazdır komut, metin argümanını standart çıktıya yazar.
4. Log15 Paketi
bu Günlük15 paketi, Go'daki en iyi uygulamalarla insan ve makine tarafından okunabilen günlük kaydı için basit bir fikirli araç takımıdır. Log15 modelleri io ve http yerleşik olana alternatif olarak Go standart kitaplığından paketler kayıt paket.
Log15 paketinin özellikleri şunları içerir:
- basit, anlaşılması kolay bir API
- anahtar/değer çiftleriyle yapılandırılmış günlük kaydı
- özel bağlamlı alt kaydediciler
- küçük bir API üzerinden özel günlük yapılandırmaları oluşturmak için işleyici arabirimi
- renkli terminal desteği
- dosyalara, akışlara, sistem günlüklerine ve ağ günlüklerine giriş yapmak için yerleşik destek
- çıktı için kayıtların arabelleğe alınması.
yükleyebilirsiniz Günlük15 bu komutla Go paketlerinize.
Git github.com/inconshreveable/log15'i edinin
Log15 paketini kullanmaya başlamak kolaydır. İşte bir günlükçü başlatma ve paketle bilgi ve hata seviyelerinde oturum açma örneği.
içe aktarmak (
"github.com/inconshreveable/log15" günlüğü // takma ad günlük olarak içe aktar
)
işlevana() {
serverLog := günlük. Yeni ("depo", "yeni depo") // günlükçü başlatılıyor
sunucu günlüğü Info("depo katmanı sağlık kontrolü başarılı") // bilgi günlüğü
sunucu günlüğü Hata ("depo katmanı sağlık denetimi başarısız oldu") // hata günlüğü
}
bu sunucu günlüğü değişken, Log15 günlükçüsünün bir örneğidir; en Yeni yöntem, sağladığınız bağlam bağımsız değişkenleriyle bir günlükçü döndürür.
bu Bilgi yöntem bir bilgi mesajı döndürür ve Hata yöntem bir hata mesajı döndürür.
Faydalı ve Anlaşılır Günlükler Yazın
Günlüğe kaydetme, geliştirme sürecinin diğer herhangi bir parçası kadar kritik olabilir. İlk aşamalarda çok kolay görünebilir, ancak temel uygulamalara bağlı kalmak süreci zorlaştırabilir. Günlüğe kaydetmenin her uç durumunu ve yönünü ele almak için, işleri kolaylaştırmak için bir günlük paketi kullanmalısınız.
Günlüklerinizi anlaşılır ve amaçlarına uygun hale getirmek için günlük düzeylerini, yapısını ve bağlamını kullanın.