nodejs實戰系列 - 手寫NodeJs日誌處理

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()
})複製代碼
相關文章
相關標籤/搜索