node 日志管理log4js【转】

一、默认的控制台输出

我们使用express框架时,开发模式用node或者supervisor启动nodejs应用时,控制台都是显示如下的日志。

GET /css/bootstrap.min.css 304 1ms
GET /css/my.css 304 0ms
GET /js/bootstrap.min.js 304 4ms
GET /js/jquery-1.9.1.min.js 304 6ms
GET /js/holder.js 304 3ms
GET /cat/json/latest 200 6ms
GET /cat/json/master 200 4ms
GET /cat/json/classic 200 2ms
GET /about 200 6ms
GET /css/bootstrap.min.css 304 2ms
GET /css/my.css 304 2ms
GET /js/bootstrap.min.js 304 2ms
GET /js/jquery-1.9.1.min.js 304 1ms
GET /js/holder.js 304 1ms
GET /js/bootstrap.min.js 304 1ms
GET / 304 6ms
GET /js/jquery-1.9.1.min.js 304 2ms
GET /css/my.css 304 1ms
GET /css/bootstrap.min.css 304 1ms
GET /js/bootstrap.min.js 304 2ms
GET /js/holder.js 304 2ms
GET /cat/json/latest 200 3ms
GET /cat/json/master 200 2ms
GET /cat/json/classic 200 2ms
GET /admin/ 304 13ms
GET /css/bootstrap.min.css 304 3ms
GET /js/jquery-1.9.1.min.js 304 2ms
GET /css/my.css 304 2ms
GET /js/bootstrap.min.js 304 1ms
GET /js/holder.js 304 2ms

我们也可以在代码中,用console.log()打印一些控制台日志。

修改routes/index.js

exports.index = function(req, res){
console.log("This is an index page!");
res.render(‘index‘, {
        title:‘首页|moive.me‘,
        page:‘index‘
    });
};

访问页面,结果如下:

This is an index page!
GET / 304 19ms
GET /css/bootstrap.min.css 304 4ms
GET /css/my.css 304 2ms
GET /js/jquery-1.9.1.min.js 304 38ms
GET /js/holder.js 304 29ms
GET /js/bootstrap.min.js 304 28ms

这样的输出的结果,都是在控制台显示,一旦server重启日志就丢失了。对于程序开发来说,这样的输出已经够用了。但是在生产环境上,我们希望能把控制台的输出,保存到文件中,而且需要更多的信息,不仅仅是默认的简化的日志信息。

由于express框架没有日志功能,我们需要引入log4js包来完成这个功能。

二、配置log4js与express框架集成

1、安装

npm install log4js

2、修改项目入口配置文件,如日志分析项目express.js

var log4js = require(‘log4js‘);
log4js.configure({
  appenders: [
    { type: ‘console‘ }, //控制台输出
    {
      type: ‘file‘, //文件输出
      filename: ‘logs/log.log‘,
      maxLogSize: 1024,
      backups:3,
      category: ‘normal‘
    }
  ]
});
var logger = log4js.getLogger(‘normal‘);
logger.setLevel(‘INFO‘);
...

app.use(log4js.connectLogger(logger, {level:log4js.levels.INFO}));
app.use(app.router);

需要在express.js中进行log4js的配置。 appenders中配置了两个输出,一个是控制台输出,一个是文件输出。

appenders.type=file的对象,指定文件输出位置及文件大小,当超过maxLogSize大小时,会自动生成一个新文件。logs的文件目录要动手创建。 level:log4js.levels.INFO, 设置默认日志输出级别是INFO。

log4js的输出级别6个: trace, debug, info, warn, error, fatal

  • logger.trace(‘Entering cheese testing’);
  • logger.debug(‘Got cheese.’);
  • logger.info(‘Cheese is Gouda.’);
  • logger.warn(‘Cheese is quite smelly.’);
  • logger.error(‘Cheese is too ripe!’);
  • logger.fatal(‘Cheese was breeding ground for listeria.’);

如果输出级别是INFO,则不会打印出低于info级别的日志trace,debug,只打印info,warn,error,fatal。这样做 的好处在于,在生产环境中我们可能只关心异常和错误,并不关心调试信息。从而大大减少日志的输出,能减少磁盘写入。而在开发环境中,我们可以需要打印非常 多的信息,帮助开发人员定位错误,调试代码。

还有一个好处就是,代码中可以混有各种的日志打印代码。我们只要在一个配置文件中,修改输出级别,日志输出就会发生变化,不用修改所有的代码。如果所有地方都是console.log(),那么上线的时候,改动这个东西就要花很多时间。

三、根据项目配置log4js

  1. 增加replaceConsole代替console.log() 增加replaceConsole配置,让所有console输出到日志中,以[INFO] console代替console默认样式。

     var log4js = require(‘log4js‘);
     log4js.configure({
       appenders: [
         { type: ‘console‘ },{
           type: ‘file‘,
           filename: ‘logs/log.log‘,
           maxLogSize: 1024,
           backups:4,
           category: ‘normal‘
         }
       ],
       replaceConsole: true
     });

  2. 调整日志输出的格式
     app.use(log4js.connectLogger(logger, {level:
     level:log4js.levels.INFO, format:‘:method :url‘}));
  3. 自动调整日志输出级别
     日志级别对应规则:
     http responses 3xx, level = WARN
     http responses 4xx & 5xx, level = ERROR
     else, level = INFO  

    设置level为auto:

      app.use(log4js.connectLogger(logger, {level: ‘auto‘, format:‘:method :url‘}));

四、调整log4js结构

我们在配置log4js时会有一个问题。就是以上所有配置信息都是在express.js中做的,logger也是在这里直接定义的。如果在控制器(routes)想用log4js进行输出,我们现在拿不到logger的句柄。

新建立log.js

var log4js = require(‘log4js‘);

log4js.configure({

    appenders: [
        {
            type: ‘console‘,
            category: "console"

        }, //控制台输出
        {
            type: "file",
            filename: ‘logs/log.log‘,
            pattern: "_yyyy-MM-dd",
            maxLogSize: 20480,
            backups: 3,
            category: ‘dateFileLog‘

        }//日期文件格式
    ],
    replaceConsole: true,   //替换console.log
    levels:{
        dateFileLog: ‘debug‘,
        console: ‘debug‘
    }
});

var dateFileLog = log4js.getLogger(‘dateFileLog‘);
var consoleLog = log4js.getLogger(‘console‘);
exports.logger = consoleLog;

exports.use = function(app) {
    app.use(log4js.connectLogger(consoleLog, {level:‘INFO‘, format:‘:method :url‘}));
}

我们把logger单独定义出来,并且做为API暴露出来,此处是开发调试,没有使用文件输出。 这样在其他模块中使用logger输出日志只需如下操作:

var logger = require(‘../../log‘).logger;
logger.debug("collectTime=%s",collectTime);

样我们就已经玩转log4js了,如果部署生产需要文件输出只要修改log.js中dateFileLog级别,然后设置exports.logger=dateFileLog即可。

原文地址:http://www.blogways.net/blog/2014/06/09/node-log4js.html, 感谢原作者分享。

时间: 2024-08-27 06:58:48

node 日志管理log4js【转】的相关文章

玩转Nodejs日志管理log4js(转)

转自:http://blog.fens.me/nodejs-log4js/ 前言 日志对任何的应用来说都是至关重要的.在Nodejs中使用express框架并没有自带的日志模块,我们可以选择log4js来完成日志记录的功能. 如果用过JAVA中log4j的同学,肯定对日志并不陌生,学习log4js会更得心应手的. 文章目录: 默认的控制台输出 通过log4js输出日志 配置log4js与express框架集成 根据项目配置log4js 优化log4js结构 1. 默认的控制台输出 我们使用exp

NodeJS日志管理 Log4js

简述: 记录配置nodejs-log4js日志输出 参考: http://cnodejs.org/topic/521ee22abee8d3cb12fc1f02 https://github.com/nomiddlename/log4js-node/wiki/Date%20rolling%20file%20appender 步骤: 1. 进入Express项目根路径, 下载log4js的库文件 [plain] view plaincopy npr install log4js 2. 配置log4j

日志管理log4js的配置

以前就是在app.js 直接用,今天把它抽出来了. log4js.json { "appenders": [ { "type":"console", "category":"console" }, { "category":"log_file", "type": "file", "filename": &qu

nodejs日志管理log4js

常用的2种配置: 1.按文件大小分片,备份若干数量的文件 var log4js = require('log4js'); log4js.configure({ "appenders" : [ {"type" : "console"}, { "type" : "file", "filename" : "logs/app.log", "maxLogSize&qu

【日志】log4js

手动创建日志目录 nodejs之日志管理 玩转Nodejs日志管理log4js

log4js-Node.js中的日志管理模块使用与封装

开发过程中,日志记录是必不可少的事情,尤其是生产系统中经常无法调试,因此日志就成了重要的调试信息来源. Node.js,已经有现成的开源日志模块,就是log4js,源码地址:点击打开链接 项目引用方法: npm install log4js 1.配置说明(仅以常用的dateFile日志类型举例,更多说明参考log4js-wiki): { "appenders": [ // 下面一行应该是用于跟express配合输出web请求url日志的 {"type": "

Nodejs日志管理包

Nodejs日志管理工具包:log4js 和 winston 1.log4js的使用 1)package.json中加入依赖 "log4js":"~0.6.21" 2)写一个log4js的配置文件log4js_conf.json { "appenders": [ { "type": "console" }, { "type": "file", "filena

logstash+elastic+kibana日志管理工具介绍及安装

logstash+elastic+kibana日志管理工具介绍及安装 一. Logstash 安装 1.1 前置条件,安装了官方java 7或更新版本 查看 [ldx@1511-min ~]$ java -version openjdk version "1.8.0_71" OpenJDK Runtime Environment (build 1.8.0_71-b15) OpenJDK 64-Bit Server VM (build 25.71-b15, mixed mode) 1.2

ELK日志管理

ELK日志管理 ·        1.简介 ·        2.依赖组件 ·        3.下载 ·        4.安装步骤 o   4.1 安装redis o   4.2 ElasticSearch安装 o   4.3 LogStash安装 o   4.4 Kibana安装 ·        5.使用说明 o   5.1 ElasticSearch o   5.2 Kibana 1.简介 ELK日志管理系统主要功能:应用系统日志的分析和监控 . ELK组成:ElasticSearch