2019-09-14Node日志感受

why

日志是用来记录程序运行重要的工具

  • 记录请求日志,关键节点打上日志,可以追踪问题(生产
  • 方便调试,定位故障
  • 监控应用的运行状态

what(egg.js为例)

日志分为:

  • appLogger应用日志,也是我们自定义的日志
  • coreLogger核心框架,插件日志
  • errorLogger
  • agentLogger用于监控agent日志

日志级别:

  • ctx.logger.debug()
  • ctx.logger.info()
  • ctx.logger.warn()
  • ctx.logger.error()
  • 以appLogger为例,一共4*4种

日志编码:

  • 默认utf-8

feature

目前日志都支持切割,每天一个文件,以.log.2019-09-14为尾缀(小时切割和文件大小切割实用性不高),编写日志的时候我们也需要注意如下几点:

  • 在关键请求关键位置打好日志

  • 打印日志注明这是哪个文件哪个方法处理的日志

    • logger.debug(`>>>> Entering yourMethod(month = ${month}, count= ${count}");
      //通过日志 >>>> 和 <<<< 将给出函数输入和退出的信息
      
  • 日志不能太多,一个是查问题日志太多,第二个是对硬盘写入日志也有一定性能影响(egg是写入内存,每秒保存一次硬盘)

  • 合理使用try-catch来进行日志输出

  • 日志写法一定要避免简洁,不要日志再抛错(正常打印参数,打印处理结果)

  • 日志不能具备除了日志以外的功能

  • 正确把握日志级别,info记录信息(最主要的),debug显示调试信息,warn显示警告,error保存数据库请求类型的报错

  • 尽量使用ctx.logger而并非console.log,后者将会把所有日志打印在stdout中,无法关闭或打开调试信息,并且不区分级别