使用 Morgan 的内置功能实现此目的的另一种方法是 skip 参数。来自documentation:
// EXAMPLE: only log error responses
morgan('combined', {
skip: function (req, res) { return res.statusCode < 400 }
})
skip 选项指定一个带有参数req 和res 的函数,该函数返回True/False 以确定是否应跳过日志记录选项。该函数可以包含任何必要的代码,只要它返回True 或False。
根据您要区分登录的参数,这可能比多行 if/else 块更简单。将 HTTPS 流量与 HTTP 流量分开记录的示例服务器:
const express = require('express');
const http = require('http');
const https = require('https');
const logger = require('morgan');
const httpsOptions = // {} hash of options.
app.use(logger('combined', {
stream: httpLogStream,
skip: function(req, res) { return req.secure }
});
app.use(logger('combined', {
stream: httpsLogStream,
skip: function(req, res) { return !req.secure }
});
http.createServer(app).listen(80);
https.createServer(httpsOptions, app).listen(443);
可以在 here 找到我在此示例中所做的设置 HTTPS 的一个很好的演练。
要了解 Express 的 req.secure 方法:here。
日志流设置为Morgan's documentation。