自己动手写一个nodejs的日志生成器

自己动手写一个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;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值