Node.js Ortamında Loglama ve Debugging Nasıl Yapılır ?

Logging & Debugging

Kodun nasıl çalıştığını anlamak ve hataları bulmak için loglama ve debugging yapabilmeniz gerekiyor. Local’de kendi ortamınızda belki sorunları Debugging ile çözebilirsiniz fakat Prod ortamda Loglara erişip loglar üzerinde analiz yapmanız gerekir.

Bir önceki yazımda awsturkiye.com adresinde Türkiyedeki Twitter Verilerinin analizi için yazdığım Node.js uygulamasının nasıl Elastic Beanstalk çalıştırıldığını anlatmıştım.

Şimdi bu uygulamaya yeni bir özellik ekleyelim ve bu özelliğin nasıl çalıştığını anlamaya çalışalım.

Senaryo: Uygulamamıza bağlanan kişi sayısını bulmaya çalışacağız. Anlık olarak uygulamamıza kaç kişi bağlı..

Aşağıdaki kodumuz her socket bağlantısında socket sayısını arttırken , socket’in kopmasında da sayıyı bir azaltıp toplam bağlantılı kullanıcı sayısını tüm client’lara iletiyor..

Local’de Debugging & Logging

Bu durumu Local’de test ediyorum basit anlamda console.log ile sistemin nasıl çalıştığını anlayabiliyoruz. Arka sayfayı chrome’da 3 tab olacak şekilde arka arkaya açtık sonra refresh ettik. Sonra bazı tabları kapattık. Benim yaptığım davranış sırasında işlemler gerçekleşti..

Şimdi Local’de debugging yapmak istiyorum. Acaba bu socket nesnesinin içerisinde gelen değerler nedir. Bunun içinde en iyi yöntem Chrome Dev Tool’ undan faydalanmak..

node — inspect server.js //komutu uygulamayı başlatır.
node --inspect --debug-brk server.js //komutu ilk satırda debug modda bekletir..

Bize verilen linki Chrome Browser’ınıza yapıştırın. Artık Socket nesnesi içerisinde ne geldiğini görebilirsiniz..

Elastic Beanstalk Üzerinde Node.js Loglarına Erişme

Elastic Beanstalk üzerinde Log sekmesine girerek buradan istediğini loglara erişebilirsiniz.

Logları açtığımızda refresh işlemininden sonra refresh yapılan tabların hemen disconnect olmadığını görebiliriz.. Burada her sayfa refresh yapıldıkça connection sayısı artmakta ama 20,30 saniye sonra o socket connectionlarının düştüklerini görebiliyoruz…

Sadece logları Console’dan indirmek durumunda değiliz. Gerekirse Beanstalk için oluşturulan EC2 makine bağlanarak bunun içerisinde /var/log/nodejs/nodejs.log dosyasına bakılarak production ortamındaki loglara bakılabilir..

console.log Yerine winston kütüphanesi ile daha detaylı Loglama

Console.log sadece mesajları yazdırırken daha detaylı log yazdırma ihtiyacı duyabilirsiniz. Bunun için winston kütüphanesini aşağıdaki komut ile indirin.

npm install winston --save

(error, warn, info, debug vb..) istediğiniz seviyede loglama yapabilirsiniz..

winston.log(‘info’, ‘Hello log files!’, { 
someKey: ‘abcd’
})