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()
})复制代码