自己动手写一个nodejs的logger
最近正在边学边用node.js开发个人应用的server,由于有用到websocket相关,想对websocket的通信选择性的做下日志记录,所以萌发了自己动手写一个logger的想法。
引用了node的fs模块,还引入了moment类库方便处理时间日期(moment需要自己安装)。
个人感觉还有很多可以优化的地方,欢迎路过的同学提出宝贵意见!!!
下面直接贴代码:
const fs = require('fs');
const moment = require('moment');
// 上次写入日志日期 年月日
let lastDate = moment().format('YYYY-MM-DD');
// 创建日志文件
function createLogFile() {
const year = moment().get('year'),
month = moment().get('month') + 1,
date = moment().get('date');
const dirPath = './logs/' + year + '/' + month + '/';
const fileName = date + '.log';
const options = {
flags: 'a', //
encoding: 'utf8', // utf8编码
}
// 创建日志目录
fs.mkdirSync(dirPath, { recursive: true });
return fs.createWriteStream(dirPath + fileName, options);
}
// 生成日志写入流
let writeStream = createLogFile();
/**
* 写入日志
* @param {*} chunk [写入的日志内容]
*/
const logger = function (chunk = '') {
// 用于和上次写入日志日期对比
const nowDate = moment().format('YYYY-MM-DD');
// 本条日志的写入时间
const dateTime = moment().format();
// 将本次写入时间和上次写入日期对比,判断是否为同一天
if (nowDate === lastDate) {
writeStream.write(dateTime + '\n' + chunk + '\n');
lastDate = nowDate;
} else {
// 结束写入流,结束完成后重新生成日志文件并写入
writeStream.end();
writeStream.on('close', () => {
writeStream = createLogFile();
writeStream.write(dateTime + '\n' + chunk + '\n');
});
}
}
module.exports = logger;