koa2 集成 log4js
前言:之前介绍了 log4js 的基本配置,这一章,我们尝试让其与 koa2 框架相结合,真正在实际的项目中发挥效用
环境准备
- nodeJs : 8.11.1
- koa2 : 2.4.1
编写 logger 中间件
创建 /logger/mylog.js 文件,并增加如下代码:
1 | const log4js = require('log4js'); |
修改 app.js,将 logger 中间件挂载到 koa2 上去
1 | // 引入 logger 中间件 |
访问页面,日志输出结果
1 | {"date":"2018-05-28T14:52:27.661","level":"INFO","data":'响应时间为: 0.0070s,请求 url : /'} |
上述例子中,当 http 请求经过此中间件时便会在 myLog.log
文件中记录一条 level 为 info 级别的日志文件,并且记录下请求的响应时间。
将 logger 绑定到 ctx 上,方便访问
1 | const log4js = require('log4js'); |
其他中间件通过 ctx 上的 log 方法打印日志
创建 middleware/extendCtxLog 文件,并输入:
1 | module.exports = () => { |
app.js 中应用该中间件
1 | const extendCtxLog = require('./middleware/extendCtxLog'); |
重启 node 服务,并访问,log 日志输出:
1 | {"date":"2018-05-29T10:53:47.288","level":"INFO","data":'extendCtx middleware'} |
这样,其他的中间件也可以访问到 ctx 上的 log 日志服务了。
将 logger 绑定到 global 对象
上述的 logger 中间件存在一个问题,那就是每一次 http 请求经过该中间件,都会重新进行 getLogger 操作
,故而不妨把 logger 对象绑定到 global 上去,logger 中间件去调用 global 上的 logger 实例来进行日志操作
创建 /logger/global.js 文件
1 | const log4js = require('log4js'); |
改写 app.js,初始化 globalLogger 实例
1 | // 初始化 logger 实例 |
改写 logger 中间件
1 | module.exports = () => { |
重启 node 并访问,系统会新建 globalLog.log 文件并输出:
1 | {"date":"2018-05-29T10:31:14.531","level":"INFO","data":'响应时间为0.031s'} |
抽取 log4js 配置,并且增加日志记录信息
修改 /logger/mylog.js 文件 :
1 | const log4js = require('log4js'); |
修改 app.js :
1 | const ip = require("ip"); |
日志输出结果 :
1 | [2018-05-29T14:57:29.836] [INFO] cheese - 响应时间为0.072s, 请求相关信息: {"method":"GET","url":"/","host":"localhost:3000","serverIp":"192.168.105.165","projectName":"koa2&log4js","userAgent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"} |
记录 node 错误信息
我们新增 /logger/index.js 文件,并输入如下内容:
1 | const logger = require("./logger/"); |
如此便能捕获,其他中间件中抛出的异常,并且记录到日志里去。这里面,状态吗小于 500 的都按照 500 来处理。