nodejs实战系列 - 手写NodeJs日志处理

917 阅读1分钟

node.js中已经有很多非常优秀的日志模块,比如log4js,morgan等,为何要自己实现日志功能呢,其实实现日志非常简单,只需不到十行代码即可实现高度可定制化的日志功能,没必要因为使用日志而去看各种日志模块的文档,花费的时间更多而且失去了亲自去挖掘node能力的机会

首先想一下我们要实现一个怎样的日志功能

1.可配置
2.可打印到本地
3.单独的错误记录
4.分时切割

从以上的要求可看出我们需要依赖path,fs,moment模块
假设我们使用express框架

const path = require('path')
const express = require('express')
const fs = require('fs')
const moment = require('moment')

const app = express()

app.get('*', function(err, req, res) {
    //创建日志目录
    const logDirectory = path.join(__dirname, '/log')
    fs.existSync(logDirectory) || fs.mkdirSync(logDirectory)
    if(err) {
        //创建错误日志写入流
        const errorStream = fs.createWriteStream(path.join(__dirname, `/log/error-${moment().format('YYYYMMDD')}.log`), {flags: 'a'})
        // \r\n用于换行
        errorStream.write( `[error] url: ${req.url} message: ${err.stack} \r\n`)
        errorStream.end()
    }
    //创建日志写入流
    const logStream = fs.createWriteStream(path.join(__dirname, `/log/access-${moment().format('YYYYMMDD')}.log`), {flags: 'a'})
    // \r\n用于换行
    logStream.write( `[error] url: ${req.url} status: ${res.status} ...这里自己配置想要获取的信息... \r\n`)
    logStream.end()
})