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

本文介绍如何在Node.js中实现一个简单的日志模块,该模块具备可配置性、错误记录分离、日志文件按日期切割等功能。通过不到十行代码即可实现高度定制化的日志记录。

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

转载于:https://juejin.im/post/5a14033151882531e9446ffd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值