实现node日志管理

栏目: 数据库 · 发布时间: 4年前

内容简介:第一次写node项目,之前除了前端的脚手架构建接触过一些简单的,所以总是碰到很多坑。比如权限验证,比如异常处理,比如日志管理。在看log4js使用方法的时候突然想到自己就可以实现简单的业务,不需要借助组件,虽然简单但是实现了挺开心的。自己的node项目写了一段时间了,但一直没有加上日志管理的功能,因为觉得没必要,很多时候都是在自己电脑上面调试的。

第一次写node项目,之前除了前端的脚手架构建接触过一些简单的,所以总是碰到很多坑。比如权限验证,比如异常处理,比如日志管理。

在看log4js使用方法的时候突然想到自己就可以实现简单的业务,不需要借助组件,虽然简单但是实现了挺开心的。

为什么需要日志管理

自己的node项目写了一段时间了,但一直没有加上日志管理的功能,因为觉得没必要,很多时候都是在自己电脑上面调试的。

但突然有一天在线上访问自己的项目,发现页面报错了,想知道为什么报错了,发现竟然没有什么很好的方法,如果我没有通过一个东西去记录的话,所以日志管理这个时候就显得尤为重要了。

日志的产生过程

  • 页面出现错误
  • 根据错误类型创建日志文件
  • 写入错误信息

创建日志方法的实现

  • 先判断要写入的路径是否存在,不存在则创建
  • 判断日志要创建在的文件夹存不存在,不存在则创建
  • 判断当前要创建的日志存不存在,存在继续写入,不存在则创建并写入

fs.stat

检查路径是否存在

fs.mkdir

创建目录的方法

fs.readFile

读取文件的方法

fs.writeFile

写入文件的方法

完成的写入日志函数

我的业务是定义了两个类型,错误和sql,然后传入日志内容

/**
   * 写入日志
   * @param {String} type // 日志类型 err 错误日志 sql sql日志
   * @param {String} content 
   */
writeLog (content, type = 'err') {
    // 创建不存在的文件夹
    await this.dirExists(`log/file/${type}`)
    // 获取到文件files
    fs.readFile(`log/file/${type}/${utils.switchTime(new Date(), 'YYYY-MM-DD')}.log`, (err, data) => {
      if (err) {
        console.log(err)
      }
      // 写入文件
      fs.writeFile(`log/file/${type}/${utils.switchTime(new Date(), 'YYYY-MM-DD')}.log`, `${data || ''}\n${content}`, async (err) => {
        if (err) {
          console.log(err)
        }
      })
    })
  }

使用

sql 执行函数上使用

function query (sql) {
  // 写入sql
  NodeLog.writeLog(sql, 'sql')
  return new Promise((resolve, reject) => {
    pool.getConnection((err, conn) => {
      if (err) {
        // 如果是连接断开,自动重新连接
        if (err.code === 'PROTOCOL_CONNECTION_LOST') {
          setTimeout(query(), 2000);
          reject('断开重连');
        } else {
          console.error(err.stack || err);
          reject(err);
        }
      } else {
        // 得到结果
        conn.query(sql, (queryErr, result) => {
          if (queryErr) {
            reject(queryErr);
          } else {
            resolve(result);
          }
          // 释放连接
          conn.release();
        })
      }
    })
  })
}

在异常处理函数中使用

handleException (req, res, e) {
    // 写入日志
    NodeLog.writeLog(e)
    
    res.json({
      code: e.errno || 20501,
      success: false,
      content: e,
      message: '服务器内部错误'
    })
  }

最后

日志完整代码


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

电子邮件营销密码

电子邮件营销密码

[美] Jeanniey Mullen、David Daniesl / 薛剑韬 / 人民邮电出版社 / 2009-9 / 39.00元

在当今互联网蓬勃发展的形势下,电子邮件是互联网应用最广的服务之一。那么如何利用其作为有效的营销工具呢?本书系统地讲解了美国电子邮件营销的预算统筹、营销策略、管理模式、执行机制、涉及的技术、营销实施的细节等,其方法有很强的可循性,并可预见将获得的成果。阅读本书之后,读者会深刻感受到电子邮件营销的博大精深,它既是一门扎实严谨的科学,又是一项充满创造力的艺术。. 本书适合企业管理人员及市场营销人员......一起来看看 《电子邮件营销密码》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具