日志
之前我们已经在原生中学习了使用Stream做日志的写入。通过readline做日志的分析等,本节,我们将看一下express为我们带来的日志分析中间件--morgan
我们可以直接使用morgan来处理access log
使用morgan
在之前的入口文件配置中,我们简单介绍过morgan如下
var logger = require('morgan');
.
..
.
app.use(logger('dev'));
这里我们我们就要讲一下其配置参数的使用(是不是很无脑呢?)
首先需要告诉大家,上面的配置其实是可以传入第二个参数的,如下
app.use(logger('dev', {
stream: process.stdout
}));
是不是看到了熟悉的Stream配置项呢,没错,这里我们写日志依然用的是Steream流来控制。
至于配置项中每一个参数代表的意思,这里给大家提供一个地址,其中不同的配置将决定日志的打印内容
https://github.com/expressjs/morgan
其中在Predefined Formats配置项下,就可以找到第一个参数代表的含义,我们可以看到其中dev
选项的打印内容和我们当前项目中的打印内容相符,然后试一试修改不同的配置项感受一下吧。
然后我们这里需要对配置进行简单的调整,将区分不同环境下对日志的不同的处理
const ENV = process.env.NODE_ENV
if (ENV !== 'production') {
app.use(logger('dev'));
} else {
const logFileName = path.join(__dirname, 'logs', 'access.log')
const writeStream = fs.createWriteStream(logFileName, {
flags: 'a'
})
app.use(logger('combined', {
stream: writeStream
}));
}
当然这里我们需要设置一个环境变量为‘production’的启动命令。上面的配置可以看出,如果是本地的开发环境,我们将不输入日志文件,如果是线上关键,我们将输入日志文件,可以看到,我们上面用到了之前的文件处理操作,在线上环境下,将日志写入到文件中。这就是第二个参数的作用,试一下吧
网友评论