Daha İyi Günlük Tutmak İçin Deneyebileceğiniz 9 Node.js Logger Kitaplığı

Yayınlanan: 2022-09-01

Kodunuzda hata ayıklama ile mücadele ediyor musunuz? Hata ayıklamayı kolaylaştırabilecek bazı günlük kaydı çözümleri mi arıyorsunuz? Daha fazlasını öğrenmek için okumaya devam edin.

Yazılım geliştirme birkaç aşamadan geçer: gereksinim toplama, analiz, kodlama, test etme ve bakım. Tüm bu aşamaların dışında, kodlama/geliştirme aşaması çok zaman ve çaba gerektirir. Yazılım mühendisleri sözdizimi hataları, mantıksal hatalar ve çalışma zamanı hatalarıyla ilgilenir. Sözdizimsel hatalar derleme sırasında tanımlanır ve kodun bir programlama dilinin kurallarına uymamasından kaynaklanır.

Öte yandan, mantıksal ve çalışma zamanı hataları, Entegre Geliştirme Ortamı (IDE) tarafından tanımlanamaz ve genellikle hatalarının ayıklanması ve düzeltilmesi zordur. Hataları çözmek zaman alan bir süreçtir ve çok fazla hata ayıklama gerektirir.

Hata ayıklama, yazılan kodun neden beklendiği gibi çalışmadığını anlamaya çalıştığı bir süreçtir. Hatayı ve meydana geldiği koddaki tam satırları bildiğimizde sorunu çözmek kolaydır. Bu nedenle, günlüğe kaydetme, kod hatalarını ayıklamak için çok kullanışlıdır.

Loglama Nedir?

Günlüğe kaydetme, bir programın yürütülmesi sırasında mesajların yakalandığı bir tekniktir. Yalnızca hata ayıklamada onlara yardımcı olabilecek mesajların günlüğe kaydedilmesi gerekir. Bu nedenle, koda ne zaman günlük ifadelerinin ekleneceğini bilmek son derece önemlidir. Ayrıca, günlük ifadeleri arasında ayrım yapmak da aynı derecede önemlidir. Günlüğe kaydetmede bilgi, uyarma, hata, hata ayıklama ve ayrıntılı gibi çeşitli düzeyler vardır. İstisna işleme için hata ve uyarı ifadeleri kullanılır.

İşlevlerden döndürülen veriler, dizi manipülasyonundan sonraki sonuçlar, API'lerden alınan veriler vb., bilgi deyimleri kullanılarak günlüğe kaydedilebilecek verilere bazı örneklerdir. Hata ayıklama ve ayrıntılı günlükler, hataların ayrıntılı bir açıklamasını vermek için kullanılır.

Hata ayıklama günlüğü, yığın izleme, girdi-çıktı parametreleri vb. hakkında bilgi verir. "Ayrıntılı", "hata ayıklama" günlüğü kadar ayrıntılı değildir, ancak meydana gelen tüm olayların bir listesini verir. Günlükler konsola, dosyalara ve çıktı akışına yazılır. Günlük yönetimi araçları, yapılandırılmış ve biçimlendirilmiş günlük kaydı için kullanılabilir.

Node.js Günlüğü

Nodejs, bir javascript çalışma zamanı ortamıdır. Node.js uygulamaları eşzamansız ve engellemesizdir ve veri yoğun ve gerçek zamanlı sistemlerde kullanılır. Node.js hakkında daha fazla bilgi edinmenin en iyi yolu Node.js eğitimlerini ve belgelerini incelemektir. İyileştirilmiş performans, sorun giderme ve hata takibi için günlük kaydı gereklidir. Node.js'de oturum açma, dahili konsol.log işlevi kullanılarak yapılabilir. Ayrıca, hata ayıklama işlevi birden çok paketle bağlantılıdır ve etkin bir şekilde kullanılabilir.

Middleware, istekleri ve yanıtları yönetmek için kullanılır. Ara yazılım, bir uygulama veya herhangi bir Javascript çerçevesi olabilir. Ara katman yazılımında oturum açma, uygulamalar ve yönlendiriciler aracılığıyla yapılabilir. Herhangi bir Node.js günlükçüsünün, günlükleri yüklemek için npm veya thread install komutunu kullanması gerekir.

Npm, "Düğüm Paket Yöneticisi" ve YARN, "Yine Başka Bir Kaynak Müzakerecisi" anlamına gelir. Ancak Yarn, npm'ye göre daha hızlı olduğu ve paketleri paralel olarak kurduğu için tercih edilir.

En iyi Node.js günlükçülerinden bazıları aşağıda listelenmiştir:

pino

Pino, Node.js uygulamaları için en iyi kaydedicilerden biri olan bir kütüphanedir. Açık kaynak kodludur, son derece hızlıdır ve ifadeleri okunması kolay bir JSON formatında kaydeder. Pino günlük düzeylerinden bazıları şunlardır: hata ayıklama, uyarma, hata ve bilgi mesajları. Projeye bir Pino günlükçü örneği alınabilir ve konsol.log ifadeleri logger.info ifadeleriyle değiştirilmelidir.

Youtube videosu

Pino'yu kurmak için aşağıdaki komutu kullanın:

 $ npm install pino

Oluşturulan günlükler ayrıntılıdır ve JSON biçimindedir, günlüğün satır numarasını, günlük türünü, günlüğe kaydedildiği zamanı vb. vurgular. Pino, bir uygulamada minimum ek yük günlüğüne neden olur ve günlükleri işlerken son derece esnektir.

Pino, Hapi, Restify, Express gibi web çerçeveleriyle entegre edilebilir. Pino tarafından oluşturulan günlükler de dosyalarda saklanabilir. İşlem için Worker iş parçacıklarını kullanır ve TypeScript ile uyumludur.

Winston

Winston, birincil odak noktası esneklik ve genişletilebilirlik ile çeşitli web çerçeveleri için günlüğe kaydetmeyi destekler. Birden çok taşıma türünü destekler ve günlükleri çeşitli dosya konumlarında saklayabilir. Taşımalar, günlük mesajlarının depolandığı yerlerdir.

Http, Konsol, Dosya ve Akış gibi bazı yerleşik aktarımların yanı sıra Bulut izleme ve MongoDB gibi diğer aktarımları da destekler. Çeşitli düzeylerde ve biçimlerde günlük kaydı yapar. Günlüğe kaydetme seviyeleri, sorunun ciddiyetini gösterir.

Youtube videosu

Çeşitli günlük kaydı seviyeleri aşağıda gösterildiği gibidir:

 { error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }

Günlük çıktı formatı da özelleştirilebilir, filtrelenebilir ve birleştirilebilir. Günlükler, zaman damgası, bir günlükle ilişkili etiketler, önceki günlükten geçen milisaniyeler vb. hakkında bilgileri içerir.

Winston ayrıca istisnaları ve yakalanmamış vaatleri de ele alır. Sorgu çalışma zamanı dosyalama, akış günlükleri vb. gibi ek özellikler sağlar. İlk olarak, Winston'ın yüklenmesi gerekir. Ardından, günlüğü depolamak için aktarımla birlikte bir Winston yapılandırma nesnesi oluşturulur. createLogger() işlevi kullanılarak bir günlükçü nesnesi oluşturulur ve günlük mesajı ona iletilir.

Düğüm-Bunyan

Bunyan, node.js'de JSON formatında hızlı oturum açmak için kullanılır. Ayrıca günlükleri görüntülemek için bir CLI (Komut Satırı Arayüzü) aracı sağlar. Hafiftir ve Node.js, Browserify, WebPack ve NW.js gibi çeşitli çalışma zamanı ortamlarını destekler. Günlüklerin JSON formatı, güzel yazdırma işlevi kullanılarak daha da güzelleştirilir. Günlüklerin önemli, hata, uyarı, bilgi, hata ayıklama ve izleme gibi çeşitli düzeyleri vardır; her biri sayısal bir değerle ilişkilendirilir.

Örnek için ayarlanan düzeyin üzerindeki tüm düzeyler günlüğe kaydedilir. Bunyan akışı, çıktıların günlüğe kaydedildiği bir yerdir. Bir uygulamanın alt bileşenleri, log.child() işlevi kullanılarak günlüğe kaydedilebilir. Tüm alt kaydediciler belirli bir üst uygulamaya bağlıdır. Akış türü bir dosya, dönen dosya, ham veri vb. olabilir. Bir akışı tanımlamaya yönelik kod örneği aşağıda gösterilmiştir:

 var bunyan = require('bunyan'); var log = bunyan.createLogger({ name: "foo", streams: [ { stream: process.stderr, level: "debug" }, ... ] });

Bunyan ayrıca DTrace günlüğünü de destekler. DTrace günlüğüne dahil olan problar, log-trace, log-warn, log-error, log-info, log-debug ve log-faal'ı içerir. Bunyan, günlükleri JSON biçiminde üretmek için serileştiriciler kullanır. Serileştirici işlevleri istisnalar oluşturmaz ve savunma amaçlıdır.

Günlük düzeyi

Loglevel, Javascript uygulamalarında oturum açmak için kullanılır. Ayrıca hafif ve basit olduğu için Node.js'nin en iyi kaydedicilerinden biridir. Verilen seviyeyi günlüğe kaydeder ve günlüğe kaydetme bağımlılığı olmayan tek bir dosya kullanır. Varsayılan günlük düzeyi “uyar”dır. Günlük çıktıları, satır numaralarıyla birlikte iyi biçimlendirilmiştir. Günlüğe kaydetme için kullanılan bazı yöntemler izleme, hata ayıklama, uyarma, hata ve bilgidir.

Herhangi bir ortamda başarısızlığa karşı dayanıklıdırlar. getLogger(), günlükçü nesnesini almak için kullanılan yöntemdir. Özelliklerini genişletmek için diğer eklentilerle de birleştirilebilir. Eklentilerden bazıları loglevel-plugin-prefix, loglevel-plugin-remote, ServerSend ve DEBUG'ı içerir. Günlüğe önek mesajları eklemek için eklenti aşağıda gösterilmiştir:

 var originalFactory = log.methodFactory; log.methodFactory = function (methodName, logLevel, loggerName) { var rawMethod = originalFactory(methodName, logLevel, loggerName); return function (message) { rawMethod("Newsflash: " + message); }; }; log.setLevel(log.getLevel()); // Be sure to call setLevel method in order to apply plugin

Derlemeler npm run dist komutu kullanılarak çalıştırılır ve testler npm test komutu kullanılarak çalıştırılabilir. Günlük düzeyi Webjar, Bower ve Atmosphere paketlerini destekler. Yeni özellikler eklendiğinde, Loglevel'in yeni bir sürümü yayınlanır.

sinyal

Signale, Javascript uygulamaları için 19 kaydediciden oluşur. TypeScript ve kapsamlı günlük kaydını destekler. Zaman damgasını, verileri ve dosya adını günlüğe kaydetmeye yardımcı olan zamanlayıcılardan oluşur. Bekleyen, tamamlanan, ölümcül, fav, bilgi vb. gibi 19 kaydedicinin dışında, özel günlükler oluşturulabilir.

Özel günlükler, bir JSON nesnesi ve günlükçü verileriyle alanlar tanımlanarak oluşturulur. Etkileşimli kaydediciler de oluşturulabilir. Etkileşimli günlükçü true olarak ayarlandığında, etkileşimli günlükçülerden gelen yeni değerler eskileri geçersiz kılar.

Signale'in en iyi yanı, gizli veya hassas bilgileri filtreleme yeteneğidir. Bir dizide birden çok sır saklanır. addSecrets() ve clearSecrets(), diziden sırları eklemek ve temizlemek için kullanılan işlevlerdir. Boostnote, Docz, Shower, Taskbook ve Vant, günlük kaydı için Signale kullanır. API'leri Signale'den çağırmak için sözdizimi aşağıdaki gibidir:

 signale.<logger>(message[,message]|messageObj|errorObj)

Bu makalenin yazıldığı sırada Signale indirme sayısı 1 milyonun üzerindedir.

izleyici

Tracer, ayrıntılı günlük mesajları üretmek için kullanılır. Günlük mesajları, zaman damgalarından, dosya adlarından, satır numaralarından ve yöntem adlarından oluşur. Çıkış günlüğü biçimini özelleştirmek için yardımcı paketler kurulabilir. Yardımcı paketler aşağıdaki komut kullanılarak kurulabilir.

 npm install -dev tracer

Tracer, dosya, akış ve MongoDB aktarımını destekler. Günlüğe kaydetmede renk konsolunu ve filtre koşullarını destekler. Başlangıçta, izleyicinin npm kurulumu kullanılarak kurulması gerekir. İkinci olarak, bir logger nesnesi oluşturulmalı ve konsolun türü seçilmelidir. Ardından, daha fazla günlük kaydı için nesne üzerinde çeşitli günlük seviyeleri veya türleri belirtilebilir.

Fonksiyon gövdesinde bulunan iş mantığı ile senkronize fonksiyonlar tanımlanarak özelleştirilmiş filtreler oluşturulabilir. Tinytim gibi mikro şablonlar da sistem günlüğü için kullanılabilir.

kabin.js

Kabin, node.js uygulamalarının sunucu ve istemci tarafında günlük kaydı için kullanılır. Hassas ve kritik bilgilerin maskelenmesinin gerekli olduğu durumlarda kullanılır. Buna kredi kartı numaraları, BasicAuth Başlıkları, tuzlar, parolalar, CSRF belirteçleri ve banka hesap numaraları dahildir. Aşağıdaki kod parçası, Cabin.js kullanılarak günlüğe kaydetmeyi gösterir.

 const Cabin = require('cabin'); const cabin = new Cabin(); cabin.info('hello world'); cabin.error(new Error('oops!'));

1600'den fazla alan adından oluşur. Kendi Kaydedicinizi Getirin (BYOL) ilkesini de takip eder. Bu, Axe, Pino, Bunyan, Winston vb. gibi diğer çeşitli kaydedicilerle uyumlu olmasını sağlar. Otomatik akış ve Kabin arabellekleri nedeniyle disklerdeki depolama maliyetlerini azaltır. Platformlar arası uyumludur ve hata ayıklaması kolaydır.

Sunucu tarafı günlük kaydı, yönlendirme ve otomatik çıktı günlüğü için ara yazılım kullanılmasını gerektirir. Tarayıcı tarafı günlük kaydı, XHR istekleri ve komut dosyaları gerektirir. Meta verileri, yani veriler, yığın izlemeleri ve diğer hatalar hakkındaki verileri görüntüleyen Ax'i kullanır. SHOW_STACK ve SHOW_META, yığın izlerini ve meta verileri göstermek veya gizlemek için true veya false olarak ayarlanmış boole değişkenleridir.

Npmlog

Npmlog, npm'nin kullandığı temel bir günlükçü türüdür. Kullanılan günlüğe kaydetme yöntemlerinden bazıları düzey, kayıt, maxRecordSize, prefixStyle, başlık ve akıştır. Ayrıca renkli günlüğe kaydetmeyi de destekler. Çeşitli günlük kaydı seviyeleri aptal, ayrıntılı, bilgi, uyar, http ve hatadır. Npm günlüğünü kullanmak için örnek bir kod parçacığı aşağıda gösterilmiştir.

 var log = require('npmlog') // additional stuff ---------------------------+ // message ----------+ | // prefix ----+ | | // level -+ | | | // vvvv log.info('fyi', 'I have a kitty cat: %j', myKittyCat)

Günlük düzeyi olarak “Infinity” belirtilirse tüm mesajlar bastırılır. Günlük seviyesi olarak “-Infinity” belirtilmişse, günlükleri görmek için günlük mesajlarını görme seçeneği etkinleştirilmelidir.

Olaylar ve mesaj nesneleri, günlüğe kaydetme için kullanılır. Önek olayları kullanıldığında önek mesajları yayınlanır. Stil nesneleri, metin ve arka plana renk eklemek, kalın, italik, alt çizgi gibi yazı tipi stili gibi günlükleri biçimlendirmek için kullanılır. Bazı npm günlük paketleri brolog, npmlogger, npmdate log vb.'dir.

kükreme

Roarr, başlatma gerektirmeyen ve yapılandırılmış veriler üreten Node.js için bir günlükçüdür. CLI ve çevresel değişkenlere sahiptir. Tarayıcı uyumludur. Fastify, Fastify, Elastic Search vb. ile entegre edilebilir. Uygulama kodu ile bağımlılık kodu arasında ayrım yapabilir. Her günlük mesajı bir bağlam, mesaj, sıra, zaman ve sürümden oluşur. Çeşitli günlük seviyeleri arasında izleme, hata ayıklama, bilgi, uyarı, hata ve ölümcül bulunur. Günlüğe kaydetmenin nasıl yapıldığına dair örnek bir kod parçacığı Roarr'dır:

 import { ROARR, } from 'roarr'; ROARR.write = (message) => { console.log(JSON.parse(message)); };

Ayrıca, hataların serileştirilmesi yapılabilir, yani hatanın olduğu örnek, nesnenin bağlamıyla birlikte günlüğe kaydedilebilir. Node.js ve Roarr'a özgü bazı ortam değişkenleri ROARR_LOG ve ROARR_STREAM'dir. "kabul", bağlam özelliklerini çeşitli düzeylere aktarmak için node.js ile birlikte kullanılan bir işlevdir. Alt işlevler, oturum açarken ara katman yazılımı ile de kullanılabilir.

Son sözler

Günlük kaydı, bir programın yürütülmesi sırasında çeşitli etkinlikleri ve olayları takip etmenin bir yöntemidir. Günlüğe kaydetme, kod hata ayıklamasında hayati bir rol oynar. Ayrıca kod okunabilirliğini artırmaya yardımcı olur. Node.js, açık kaynaklı, javascript çalıştırma zamanı ortamıdır. En iyi Node.js günlükçülerinden bazıları Pino, Winston, Bunyan, Signale, Tracer, Npmlog vb.'dir. Her bir günlükçü türünün profil oluşturma, filtreleme, akış ve taşıma gibi kendi özellikleri vardır.

Bazı kaydediciler renkli konsolları destekler ve bazıları hassas bilgileri işlemek için uygundur. Ayrıntılı ve biçimlendirilmiş günlükler, geliştiricilere kodlarındaki hataları düzeltmeye çalışırken en çok yardımcı olur. JSON formatı, verileri anahtar/değer çiftleri biçiminde günlüğe kaydettiği ve onu kullanıcı dostu hale getirdiği için genellikle günlük kaydı için tercih edilir.

Kaydediciler ayrıca diğer uygulamalarla entegre edilebilir ve çoklu tarayıcı uyumludur. Kullanmak istediğiniz kaydedici türünü seçmeden önce oluşturduğunuz ihtiyaçlara ve uygulamalara bakmanız her zaman tavsiye edilir.

Ayrıca Windows ve macOS'ta Node.js ve NPM'nin nasıl kurulacağına da bakabilirsiniz.