Node.js NodeJS12不使用旋转文件流

Node.js NodeJS12不使用旋转文件流,node.js,logging,morgan,Node.js,Logging,Morgan,我正在使用NodeJS和morgan来记录和旋转文件流来创建日志文件。我想设置应用程序,以创建apache组合格式的旋转日志文件。代码正在运行,日志在所需目录中创建。但是,跳过功能不起作用。发送到/api/healthcheck的请求仍出现在日志中。我已经确认“skip”url是正确的,并且在发送对该url的请求时与originalUrl匹配,并且我已经确认,在调用healthcheck路由时,该函数实际上返回true const logger = require('morgan'); /*

我正在使用NodeJS和morgan来记录和旋转文件流来创建日志文件。我想设置应用程序,以创建apache组合格式的旋转日志文件。代码正在运行,日志在所需目录中创建。但是,跳过功能不起作用。发送到
/api/healthcheck
的请求仍出现在日志中。我已经确认“skip”url是正确的,并且在发送对该url的请求时与originalUrl匹配,并且我已经确认,在调用healthcheck路由时,该函数实际上返回true

const logger = require('morgan');

/* Logger */
// Logger skip url
const loggerSkipUrl = '/api/healthcheck';

// Create a rotating write stream
let accessLogStream = rfs.createStream('server.log', {
  interval: '1d', // Rotate daily
  maxFiles: 30, // Maximum number of rotated files to keep in storage
  compress: 'gzip', // Compress rotated files
  path: path.join(__dirname, 'logs'),
})

// Log requests in the Apache combined format to one log file per day
app.use(logger('combined',
  { stream: accessLogStream }, // Works but doesn't skip
  { skip: (req, res) => req.originalUrl === loggerSkipUrl }, // Does not skip
  { flags: 'a' },
));
更新:我仍然有这个问题。它似乎与使用stream选项有关。例如,在不使用stream选项的情况下进行日志记录时,它会正确跳过healthcheck路由,但在使用stream选项时,它不会跳过。这是配置问题还是Morgan logger模块中的错误

function skipLog(req, res) {
  const answer = req.originalUrl.indexOf('healthcheck') > -1;
  console.log(`skipLog ${answer}`);
  return answer;
}

/* SKIP WORKS WITHOUT STREAM OPTION */

// Log API requests to console
app.use(requestLogger('dev', { skip: skipLog }));


/* SKIP DOES NOT WORK WITH STREAM OPTION */

requestLogStream = rfs.createStream('request.log', {
  interval: '1d', // Rotate daily
  maxFiles: 30, // Maximum number of rotated files to keep in storage
  path: path.join(__dirname, `logs/${hostname}`)
});

// Log API requests in the Apache combined format to one log file per day
app.use(requestLogger('combined',
  { stream: requestLogStream },
  { flags: 'a' },
  { skip: skipLog },
));
查看,您将看到同时支持
跳过

问题在于如何为工厂功能提供选项:

app.use(requestLogger('combined'),
{
stream:requestLogStream,
旗:"a",,
斯基普洛格
})
)

它一定是单个对象

你让它工作了吗?我也需要它。@rbrt不需要,但我刚刚开始了一项悬赏,希望我们能得到一些答案。您是否尝试了
app.use(requestLogger('combined',{stream:requestLogStream,flags:'a',skip:skipLog})?(我更改了
morgan
)@ManuelSpigolon的opts参数,该参数似乎有效!!!谢谢请随意为这个问题创建一个答案,我将奖励50磅奖金。赏金两天后到期。再次感谢。