Fakirin Cloudwatch’ı

Erdem Köşk
Kodcular
Published in
3 min readDec 17, 2020

Herkese merhabalar,

Günlük işimizde birçok kez logları birçok yere kaydettiğimizi ve bu loglar arasında bazen delicesine hata aradığımızı bilirsiniz. Şirket projelerinde genel olarak bu logları kaydetmek ve okumak için bir sürü yararlı tool kullanılır.

Kullanıcıların herhangi bir hata durumunda geriye bıraktığı faydalı ipuçlarını bırakabilir.
Çoğu zaman kişisel geliştirdiğimiz projelerimizde bu loglara ne çok dikkat ederiz ve bu kayıtları yedeklemek için para harcamak istemeyiz. Bu nedenle yazdığımız node js projelerinde bu işin basit bir kopyasını discord üzerinden nasıl takip edebileceğinizi elimden geldiğince anlatmaya çalışacağım.

Buradaki temel amaç verileri geriye dönük bir tabloya yada genel bir kayıt dosyası altına almak olmayacak. Ama tabiki isterseniz bu hata kayıtlarını redis, db gibi istediğiniz bir yere kaydetmenizi öneririm. Hatalar aslında tahmin etmediğimiz kadar önemlidir. Nereye müdahale edeceğimizi bilmek işimizi her zaman çok kolaylaştıracaktır. Bilirsiniz ki kod yazmak her daim temel sorun olmaz. Bazen asıl soru neden nasıl ve nereye kod yazacağımızı bulmak olur. Bu durumlar için harika bir yöntem olarak kullanabilirsiniz.

Öncelikle daha önceki yazımda node js üzerinden discord kanalımıza mesaj göndereceğimiz üzerinde konuşmuştuk. Yazıya buradan ulaşabilirsiniz.

Şimdi o konuda değinmediğimiz ve asıl kullanabileceğimiz yere gelirsek birçoğumuz hata ayıklamak için farklı yöntemler kullanır. En etkili ve güzel yöntemlerden biri bunun için bir middleware yazmaktır. Bilmeyenler için kabaca middleware request ve response hattı üzerinde araya girebilen ufak kod satırları diyebiliriz. Yani her fonksiyon için ayrı bir kod yazmaktansa middleware yapıp bunu hem sade hemde basit hale getirebiliriz.

const { errorResponse } = require(‘../util/response’);
const loggerPlugin = require(‘../plugin/logger’);
module.exports = (err, req, res, next) => {
res.setHeader(‘Content-Type’, ‘application/json’); loggerPlugin.error(err.stack);
return res.status(err.getCode()).json( errorResponse(err.message, err.getCode()),
);
};

Yukarda gördüğünüz benim hata için yazmış olduğum middleware. Burada gözünüze loggerPlugin ve errorResponse çarpmış olmalı. ErrorResponse sadece benim tüm api mesajlarını standart etmeme yarıyor. Şimdi gelelim loggerPlugin yapısına,

const { createLogger, format, transports } = require('winston');
const discordService = require('../server/services/discord');
const { DISCORD_MESSAGE_TYPES } = require('../constant');
const config = require('../../config');

const env = process.env.NODE_ENV || 'development';


const logger = createLogger({
// change level if in dev environment versus production
level: env === 'prod' ? 'info' : 'debug',
format: format.combine(
format.timestamp({ format: 'DD-MM-YYYY HH:mm:ss' }),
format.json(),
format.splat(),
format.colorize(),
format.printf((info) => {
if (info.level.includes('error')) {
discordService.sendMessageToDiscord({ messageType: DISCORD_MESSAGE_TYPES.ERROR, message: info.message });
}

return `<${info.timestamp}> |${info.level}| : ${info.message} - `;
}),
),
transports: [
new transports.Console({
json: true,
prettyPrint: obj => JSON.stringify(obj),
silent: env === 'prod',
}),
],
});

module.exports = logger;

Daha önceki yazımda paylaştığım discord service ve tiplerini burada kullandığımı görmüşsünüzdür. Bu katman her hata çağrılarak araya giriyor ve hata metnini discordda belirlediğim kanala yollamaktadır. Bu sayede kodu server’a yüklediğimizde aldığımız prod hatalarını discorddan takip edebilmeye başlamış olacağız.

Voolla karşınızda amatör hata takibimimiz… Tüm kodların aktif bir projede nasıl kullanıldığını görmek isterseniz sizi buraya alalım.

Umuyorum işinize yaramıştır. Tekrar görüşmek üzere :)

--

--