CodeBlanks Logo Icon CodeBlanks

Structured logging

Structured logging ve JSON formatını öğrenirsin.

Structured logging

Yapısal günlükleme (structured logging), logları düz metin yerine JSON gibi yapısal biçimde yazmaktır. Bu, logların programatik olarak aranmasını ve filtrelenmesini kolaylaştırır. Üretim sistemlerinde standarttır.

Örnek: logger.info({ user: "Ayşe", action: "login" });. Winston bunu JSON olarak yazdırır. Düz metin loglarında user=Ayşe action=login gibi bir dize olur; bu, ayrıştırmak zor. JSON loglarda ise her alan bir anahtardır; user alanına göre arama yapmak kolaydır. Winston'ın format.json() ile tüm logları JSON'a çevirebilirsin. Yapısal loglar, ELK (Elasticsearch, Logstash, Kibana) gibi merkezi log sistemlerinde çok değerlidir.

winston.format.json()

Winston'ın format.json() ile tüm logları JSON olarak yazdırabilirsin. Bu, yapısal loglamanın en kolay yolu. Format, transport'lardan önce uygulanır.

Örnek: winston.createLogger({ format: winston.format.json(), transports: [new winston.transports.Console()] });. Bu logger her logu JSON olarak yazar. Çıktı: {"level":"info","message":"...","timestamp":"..."}. winston.format.combine() ile birden çok format birleştirilebilir: winston.format.combine(winston.format.timestamp(), winston.format.json()). Bu, loga zaman damgası ekler ve JSON olarak yazar. Format, logların biçimini global olarak belirler; her transport için ayrı format da verilebilir.

Uygulama JSON formatlı logger oluştur

winston modülünü içe aktar. winston.createLogger({ format: winston.format.json(), transports: [new winston.transports.Console()] }) ile JSON formatlı logger oluştur. logger.info("Mesaj") yaz.

Başlangıç kodu

index.js
// winston içe aktar
// buraya yaz

// JSON formatlı logger oluştur
// buraya yaz

// info log yaz
// buraya yaz

Örnek çözüm

index.js
const winston = require("winston");
const logger = winston.createLogger({
  format: winston.format.json(),
  transports: [new winston.transports.Console()]
});
logger.info("Mesaj");

Beklenen çıktı

Mesaj

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Yapısal loglama neden kullanılır?

index.js
logger.info({ user: "Ayşe" })
  • Logları aranabilir ve filtrelenir hale getirmek için Doğru cevap
  • Daha hızlı ağ için
  • Daha az disk kullanmak için
  • Daha renkli konsol çıktısı için

Açıklama: Yapısal loglama logları aranabilir yapar.

2 format.json çağrısını tamamla

Soru
format: winston.format.____(),
Cevap
format: winston.format.json(),

Açıklama: format.json() ile JSON formatı kullanılır.

3 Parçayı rolüne eşle

Kavram Anlamı
format.json JSON olarak yazar
format.timestamp Zaman damgası ekler
format.combine Formatları birleştirir
nesne geçirme Yapısal loglama

İleri seviye bölümündeki tüm dersler