Ana içeriğe atla
LogBrew, geliştiriciler ve kodlama asistanları için bir gözlemlenebilirlik platformudur. Cömert bir ücretsiz planı vardır ve kart gerektirmez. Bu rehber Node.js’te Winston ve Pino ile loglamayı kurar, bir Express logger ekler ve her logu istek iziyle birlikte LogBrew’e gönderir. Her örnek Node.js 22, Winston 3.19, Pino 10.4, Express 5.3, @logbrew/sdk 0.1.40, @logbrew/node 0.1.24 ve @logbrew/express 0.1.10 ile çalıştırıldı. Her çıktı bloğu gerçek çıktıyı gösterir.

Winston veya Pino seçin

İki kütüphane de yapılandırılmış JSON logları yazar. Uygulamanızın zaten kullandığı kütüphaneyle devam edin. LogBrew kurulumu her kütüphane için farklıdır.

Bir LogBrew projesi hazırlayın

1

Bir proje anahtarı oluşturun

CLI ile giriş yapın. Bir proje oluşturun. Projenin alım anahtarını (ingest key) yalnızca sahibinin okuyabildiği bir dosyada saklayın.
CLI anahtarı ekrana yazdırmaz. Canlı ortamda platformunuzun gizli anahtar yöneticisini kullanın.
2

Paketleri kurun

Paketler Node.js 18.19 veya üstünü gerektirir. Winston’ı, Pino’yu veya ikisini birden kurun.
3

Anahtarı ve dağıtım bilgilerini ayarlayın

createLogBrewNodeClient() anahtarı LOGBREW_SERVER_API_KEY değişkeninden okur. Hizmet adı package.json içindeki name değeridir. Farklı bir ad kullanmak için LOGBREW_SERVICE_NAME değişkenini ayarlayın. Örnekler ES modüllerini kullanır, bu yüzden package.json içinde "type": "module" ayarlayın.

Node.js log seviyeleri

Her kütüphanenin kendi seviye adları ve sayıları vardır. LogBrew 4 seviye saklar ve asıl seviyeyi meta veride tutar. Winston’da düşük sayı daha ciddi bir seviyeyi gösterir. Pino’da yüksek sayı daha ciddi bir seviyeyi gösterir. Canlı ortamda info ayarlayın. debug seviyesini yalnızca kısa bir tanı için ayarlayın.

Winston logger

Bu dosyayı winston-app.js olarak kaydedin. İlk format, logger seviyesinin altındaki kayıtları hiçbir transport almadan önce atar. LogBrew transport’u logger’ın yazdığı her kaydı alır, bu yüzden bu filtreye ihtiyaç duyar.
node winston-app.js komutunu çalıştırın. Konsol info veya üstündeki her kayıt için 1 JSON satırı alır. Yığın izi burada kısaltıldı.
LogBrew aynı 3 kaydı alır. Alanlar context.* meta verisi olur. Transport hatanın adını ve mesajını gönderir, yığın izini göndermez. Yığın izini göndermek için createLogBrewWinstonTransport() içinde includeErrorStack: true ayarlayın. Her mesaj bir sonraki sorunda önceki adım (breadcrumbs) olur. Bunu durdurmak için breadcrumbs: false ayarlayın.

Pino logger

Bu dosyayı pino-app.js olarak kaydedin. installLogBrewPinoInstrumentation() fonksiyonunu ilk logdan önce bir kez çağırın. Fonksiyon tamamlanan her Pino kaydını okur. Pino yine kendi hedefine yazar.
node pino-app.js komutunu çalıştırın. Ana makine adı ve yığın izi burada kısaltıldı.
LogBrew 3 kayıt alır. Pino debug kaydını LogBrew görmeden önce atar. token alanı LogBrew’de yer almaz. LogBrew kimlik bilgisi, çerez, gövde, sorgu, URL ve yığın izi alanlarını atar. Pino redact yollarınızı ikinci bir denetim olarak korur. pid, hostname ve time Pino varsayılanlarıdır, bu yüzden LogBrew onları kopyalamaz. Otomatik yakalama 9.x serisinde Pino 9.11 veya üstünü ya da Pino 10.1 veya üstünü gerektirir. Eski Pino sürümleri için @logbrew/sdk paketindeki createLogBrewPinoDestination() fonksiyonunu Pino hedefi olarak kullanın. Geliştirmede Pino çıktısını okumak için çıktıyı pino-pretty aracına gönderin.

Express logger

logbrewMiddleware() her istek için 1 istek span’i oluşturur. logbrewErrorHandler() hataları sorun olarak bildirir. Bir istek içindeki Pino logu o isteğin iz kimliğini ve span kimliğini alır. Bu dosyayı express-app.js olarak kaydedin.
Uygulamayı başlatın. Ardından ikinci bir terminalden 2 istek gönderin.
LogBrew bu olayları alır. Her isteğin logu ve span’i aynı iz kimliğine sahiptir. Span adı somut yolu değil, route şablonunu kullanır. listening on 3000 logunun izi yoktur, çünkü bu log bir isteğin dışında yazılır. Middleware kendi istek istemcilerini oluştursun. Süreç genelindeki client nesnesini logbrewMiddleware() veya logbrewErrorHandler() fonksiyonuna vermeyin. Middleware her yanıttan sonra kendi istek istemcisini kapatır.

Winston loglarına izi ekleyin

Winston için transport’a etkin izi verin.
logbrewTransport nesnesini logger’ın transports listesine ekleyin. Böylece bir Express isteği içindeki Winston logu isteğin iz kimliğini ve span kimliğini taşır.

Logları geri okuyun

Son komut 1 isteğin tüm loglarını okur. <trace_id> değerini bir izden veya bir sorundan kopyalayın. CI’dan veya bir kodlama asistanından okumak için proje okuma anahtarı (read key) kullanın. Kurulumunuzu doğrulayın sayfasına bakın.

Log kaybetmeden kapatın

İstemci kuyruktaki olayları ilk olaydan 1 saniye sonra veya 50 olayda gönderir. Olay döngüsü boşaldığında istemci kalan olayları en fazla 2 saniye boyunca gönderir. process.exit() ve sinyaller bu adımı atlar. Çıkmadan önce await client.shutdown() çağırın. Express örneğindeki SIGTERM handler’ı bunu yapar.

Sorunları giderin

Log alanlarını seçmek için Yapılandırılmış loglama sayfasına bakın. Diğer framework’ler için SDK entegrasyonu rehberine bakın.