node.js中已經有不少很是優秀的日誌模塊,好比log4js,morgan等,爲什麼要本身實現日誌功能呢,其實實現日誌很是簡單,只需不到十行代碼便可實現高度可定製化的日誌功能,不必由於使用日誌而去看各類日誌模塊的文檔,花費的時間更多並且失去了親自去挖掘node能力的機會node
首先想一下咱們要實現一個怎樣的日誌功能express
1.可配置
2.可打印到本地
3.單獨的錯誤記錄
4.分時切割bash
從以上的要求可看出咱們須要依賴path,fs,moment模塊
假設咱們使用express框架app
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()
})複製代碼