安装
log4js是一个Node.js下的日志系统,功能非常强大,我今天也是先学点基本用法。可以访问官方地址查看各种高级使用技巧。
首先运行如下命令安装
npm install log4js
初始化
log4js的理念和java的log4j有点类似,我们先需要创建一个配置文件。log4js可以在js文件里定义配置项,也可以在json文件里定义。这里我们定义在json文件中。在项目目录下创建一个config目录,然后创建一个log4js.json文件,我们先写点简单的,输出到默认的控制台,做如下配置
{
"appenders": {
"out": {
"type": "stdout"
}
},
"categories": {
"default": {
"appenders": [
"out"
],
"level": "trace"
}
}
}
然后在我们的入口文件www\bin文件中加载这个配置项
var log4js = require('log4js');
log4js.configure('./config/log4js.json');
接下来定义一个log变量
var log = log4js.getLogger("startup");
就可以使用了,我们在Node服务启动的时候加上日志:
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
log.debug('Listening on ' + bind);
}
运行程序,即可在控制台看到类似输出
[2018-06-07T21:27:25.129] [DEBUG] startup - Listening on port 3000
这个输出根据日志的级别还是彩色的哦,很好用。前面是时间戳,后面是日志的级别,紧跟着的是TAG,是我们在定义log变量的时候指定的,最后是我们要输出的内容。除了log.debug()
函数之外,还有很多其它级别的函数,这个好理解。
接下来就是修改配置文件,满足我们不同的日志输出需求。
理解配置文件
配置文件有两个节点,一个叫appenders,一个叫categories。appenders定义了日志该输出到哪里,我这里是输出到控制台即stdout,除此之外,你还可以输出到文件甚至是远程服务器上。categories是对日志进行分类,其实就是我们刚刚定义log4js.getLogger("startup")
中的TAG,但是这里我的categories下面并没有定义startup分类,所以走了默认的default分类。这样,刚刚的配置文件就很好理解了:我们定义了一个默认的分类,这个分类输出到out中,日志级别是trace,低于trace的日志不会被输出,out在appenders中定义了,它的type是stdout,即输出到标准的控制台。
输出到文件
下面我们将日志输出到文件中永久保存。修改配置文件如下
{
"appenders": {
"out": {
"type": "stdout"
},
"app": {
"type": "dateFile",
"filename": "./log/application.log"
}
},
"categories": {
"default": {
"appenders": [
"out",
"app"
],
"level": "trace"
}
}
}
很简单,我们又定义了一个app类型的输出,它的type是dateFile,并在filename中指定了文件名,文件路径是相对于项目的根目录而言的,最后将它加到categories的default配置里面。重新运行程序,在log目录下即可发现application.log文件,内容和控制台的是一样的。这个dateFile类型很特别,会按天保存日志,避免所有的日志在一个文件里,导致日志文件越来越大的问题,这里只能明天再测试了。
错误日志的单独处理
我们需要把错误日志单独输出到一个文件里,便于发现。这里需要定义一个type为logLevelFilter的appender,这个比较特别,需要定义一个level告诉日志系统,需要过滤那个级别的日志,然后再定义一个appender告诉系统使用那个appender处理。为此,还需要再定义一个appender来处理错误日志。修改后的配置文件如下。
{
"appenders": {
"out": {
"type": "stdout"
},
"app": {
"type": "dateFile",
"filename": "./log/application.log"
},
"errorFile": {
"type": "file",
"filename": "log/errors.log"
},
"errors": {
"type": "logLevelFilter",
"level": "ERROR",
"appender": "errorFile"
}
},
"categories": {
"default": {
"appenders": [
"out",
"app",
"errors"
],
"level": "trace"
}
}
}
这样我们将错误日志另行保存在log/errors.log文件中了。注意errors节点下面的appender节点,指定了另一个appenders下面的errorFile节点。它的type是file,我们并不需要按天保存错误日志。因为错误日志毕竟还是比较少的。
另外log4js官方也有一个Demo,大家也可参考,但是注意这个Demo的日志是不输出到控制台的。
其它高级用法
log4js除了appenders之外还有一个概念叫Layouts。这个定义了日志的样式,刚刚我们看到的日志都采用了默认的样式。前面有时间戳,还能彩色打印,每天的日志是文件名是什么。其实这些都可以配置。这里就不一一说明了,官方文档讲的很详细,而且用的也比较少。