美文网首页
跟我一起学Express之日志

跟我一起学Express之日志

作者: 喜剧之王爱创作 | 来源:发表于2020-05-11 14:38 被阅读0次

日志

之前我们已经在原生中学习了使用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’的启动命令。上面的配置可以看出,如果是本地的开发环境,我们将不输入日志文件,如果是线上关键,我们将输入日志文件,可以看到,我们上面用到了之前的文件处理操作,在线上环境下,将日志写入到文件中。这就是第二个参数的作用,试一下吧

相关文章

网友评论

      本文标题:跟我一起学Express之日志

      本文链接:https://www.haomeiwen.com/subject/gzeunhtx.html