nodejs开发——log4js学习
来源:互联网 发布:访问网络电脑需要密码 编辑:程序博客网 时间:2024/05/02 04:40
在我们开发项目时,日志是必不可少的一部分,有助于我们排错、数据分析等等。而nodejs自带的console日志不太友好,比如不同级别的日志都是相同的颜色,很难区分。在开发Java时,log4j几乎是必选项。在nodejs中,类似的一个工具是log4js。该篇博客主要来学习如何使用log4js日志工具。
- 安装log4js
命令行进入项目目录,执行"npm install log4js --save"就可以在项目中集成log4js.
- log4js配置
日志有多种形式,比如我们调试时打印的日志,url网络请求时的日志,这里我们还是用express框架来实现接口请求。在js文件中实现如下:
var express = require('express');var app = express();var log4js = require('log4js');log4js.configure({ appenders: [ {type: 'console'}, { type: 'file', filename: './access.log', maxLogSize: 10, backups: 6, category: 'normal' } ], replaceConsole: true});var logger = log4js.getLogger('normal');logger.setLevel('DEBUG');app.use(log4js.connectLogger(logger, { level: 'auto', format:':method :url'}));logger.debug("loglog");logger.info("infoinfo");logger.error("errorerror");console.log("测试");console.error("错误");app.get('/', function (req, res) { res.send("hello");});app.listen(3000, function () { console.log("Server Running on http://localhost:3000");});
现在对上述代码进行解释:
(1)
var log4js = require('log4js');在当前文件中加载log4js包。
(2)
配置当前log4js,“filename”中是存放日志文件的目录和文件名,上述为保存在当前目录下,日志文件名称为access.log;"maxLogSize"表示每个日志文件的大小,应该设置为较大值,当日志超过这个大小时,会另外创建一个文件,我这里设置为较小值是为了创建多个日志文件;“backups”表示备份文件的数量,超过数量的文件会被删除;“category”表示日志策略,可以设置为normal.
log4js.configure({ appenders: [ {type: 'console'}, { type: 'file', filename: './access.log', maxLogSize: 10, backups: 6, category: 'normal' } ], replaceConsole: true});var logger = log4js.getLogger('normal');logger.setLevel('DEBUG');
配置当前log4js,“filename”中是存放日志文件的目录和文件名,上述为保存在当前目录下,日志文件名称为access.log;"maxLogSize"表示每个日志文件的大小,应该设置为较大值,当日志超过这个大小时,会另外创建一个文件,我这里设置为较小值是为了创建多个日志文件;“backups”表示备份文件的数量,超过数量的文件会被删除;“category”表示日志策略,可以设置为normal.
logger为当前log4js的一个实例,可以用来打印日志,设置的参数一般与上面的category一样。setLevel则可以根据实际项目的需求设置,设置为DEBUG,则不会打印出比INFO级别低的日志,如TRACE. 高于DEBUG级别及以上的日志会记录在日志文件中。
(3)
app.use(log4js.connectLogger(logger, { level: 'auto', format:':method :url'}));日志的一个重要功能不仅仅是在调试时使用,最重要的还是当前端发起请求时,能把该请求记录在日志中,该行代码的作用就是这个功能。其中的level参数表示日志输出级别,设置为auto,日志级别对应规则为:
- http返回码为3**:level=WARN;
- http返回码为4**,5**时,level=ERROR;
- 其他的返回码,level=INFO
(4)
logger.debug("loglog");logger.info("infoinfo");logger.error("errorerror");使用logger实例打印不同级别的日志,在控制台中输出如下:
(5)
console.log("测试");console.error("错误");也可以直接使用nodejs自带的console打印。此时打印的日志颜色很好的做了区分,已经不同于原先默认的日志了:
此时运行以上js文件,就会在当前目录下生成三个日志文件,如图所示:
某一个日志中的内容如下:
(6)
app.get('/', function (req, res) { res.send("hello");});
此时我使用Postman发起一个请求,该请求也会被记录在日志文件中:
如果觉得这样的日志配置记录的内容过少,也可以把配置改为如下:
app.use(log4js.connectLogger(logger, { level: 'auto'}));
此时的网络请求记录的内容如下:
在控制台中打印结果如下:
- log4js优化
如果在项目中的每个文件都要使用到log4js,然后都要进行上述的配置的话,比较麻烦,不太现实。我们应该使用模块化的方式把配置单独抽取出来。新建一个配置文件log4jsConfig.js,实现如下:
var log4js = require('log4js');var appender = null;var logger = log4js.getLogger('normal');logger.setLevel('INFO');var connectLogLevel = 'auto';var connectLogFormat = ':method :url';module.exports = { logger: logger, connectLogLevel: connectLogLevel, connectLogFormat: connectLogFormat};module.exports.config = function (logRoute) { appender = { appenders: [ {type: 'console'}, { type: 'file', filename: logRoute, maxLogSize: 1024000, backups: 10, category: 'normal' } ], replaceConsole: true }; return appender;};
然后在项目的主文件入口实现如下:
var log4js = require('log4js');var log4jsConfig = require('./log4jsConfig');log4js.configure(log4jsConfig.config('./access.log'));app.use(log4js.connectLogger(log4jsConfig.logger, { level: log4jsConfig.connectLogLevel, format: log4jsConfig.connectLogFormat}));
然后就能完成项目的log4js的配置。需要修改配置也只要在log4jsConfig.js中即可,不用去修改每一个js文件。
1 0
- nodejs开发——log4js学习
- nodejs log4js
- NodeJS-log4js 配置
- NodeJS日志管理 Log4js
- Nodejs中使用Log4js
- 【NodeJS】log4js打印日志
- Nodejs中使用Log4js
- Nodejs中Log4js使用
- nodejs express项目使用log4js
- nodejs开发——express框架学习
- 玩转Nodejs日志管理log4js
- 关于Nodejs中使用Log4js 解决方案
- 玩转Nodejs日志管理log4js
- 玩转Nodejs日志管理log4js
- 玩转Nodejs日志管理log4js
- nodejs Log4js v2.x配置使用
- Node学习笔记——eclipse配置nodejs开发环境
- 《nodejs开发指南》学习
- IO文件流的问题
- vscode
- easyui tree java 实现(版本2)
- maven检查是否有新依赖/插件的方法
- (二)Manifest文件结构
- nodejs开发——log4js学习
- 数据请求结果value中有null的情况
- 笔记整理
- 数据库 Access001
- phpredisadmin安装失败了
- C++项目:Json_parser
- c++中容器map的用法整理
- MySQL 5.7.8 RC安装
- Android学习笔记——Http通信