本文所说的log4js实际上是指log4js-node,它是log4js到node.js的移植。
安装:npm i log4js -S
,基本配置与使用方法可见其官方网站与文档。
顾名思义,其输出级别level为:trace < debug < info < warn < error < fatal,当设置为info时,会输出info及其之后的级别日志;当设置为trace或all时,所有级别都将输出。
注意:categories中至少要把default给配置上,否则无法使用。
简单应用如下:
const log4js = require('log4js') log4js.configure({ appenders: { out: { //设置控制台输出 type: 'console' }, spiderLog: { type: 'dateFile', filename: './logs/spiderLog', pattern: '.yyyy-MM-dd.log', alwaysIncludePattern: true }, testLog: { type: 'dateFile', filename: './logs/testLog', pattern: '.yyyy-MM-dd.log', alwaysIncludePattern: true } }, categories: { default: { appenders: ['out', 'spiderLog'], level: 'all' }, testCat: { appenders: ['out', 'testLog'], level: 'info' } } }) const logger = log4js.getLogger() // logger.trace('追踪级别') // logger.debug('调试级别') // logger.info('信息级别') // logger.warn('警告级别') // logger.error('错误级别') // logger.fatal('致命错误级别') export const loggerTest = log4js.getLogger('testCat') export default logger
结果如图:
在koa.js项目中使用
在koa.js项目中可使用koa-log4js(npm i koa-log4 -S
),作者对它进行了改造以支持“记录所有访问级别的日志”,而其他配置或用法仍与log4js一致。
新建一个logger.js文件内容如下:
const path = require('path'); const log4js = require('koa-log4'); log4js.configure({ appenders: { access: { type: 'dateFile', filename: path.join('logs/', 'access'), pattern: '-yyyy-MM-dd.log', alwaysIncludePattern: true }, application: { type: 'dateFile', filename: path.join('logs/', 'application'), pattern: '-yyyy-MM-dd.log', alwaysIncludePattern: true }, out: { type: 'console' } }, categories: { default: { appenders: ['out'], level: 'info' }, access: { appenders: ['access'], level: 'info' }, application: { appenders: ['application'], level: 'warn' } } }) //记录所有访问级别的日志 exports.accessLogger = () => log4js.koaLogger(log4js.getLogger('access')) //记录所有应用级别的日志 exports.logger = log4js.getLogger('application')
记录所有访问级别的日志
const Koa = require('koa') const app = new Koa() const { accessLogger } = require('./app/logger') app.use(accessLogger()) // ...
假如你也有一个处理错误信息的中间件
const { logger } = require('../logger') module.exports = async (ctx, next) => { try { await next() } catch (e) { logger.error(e) ctx.status = 200 ctx.body = { code: e.status === 401 ? 555 : -1, msg: e && e.message ? e.message : e.toString() } } }
有朋自远方来...评论一下呗O(∩_∩)O