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.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