【问题标题】:Morgan and Rotating-file-stream: interval doesn't work normallyMorgan 和 Rotating-file-stream:interval 无法正常工作
【发布时间】:2022-01-19 10:25:38
【问题描述】:

您好,这是我的问题,最近,我在 2021/10/01 部署了一个服务器,用于保存访问日志。我正在使用morgan 库来执行此操作,并使用rotating-file-stream 进行文件轮换。然而,经过几天的活动,我意识到轮换没有正确完成。

这是我的代码:

const morgan = require('morgan');
const rfs = require('rotating-file-stream');
const path = require('path');
const { format } = require('date-fns');

function logFilename() {
  return `${format(new Date(), 'yyyy-MM-dd')}-access.log`;
}

const accessLogStream = rfs.createStream(logFilename, {
  interval: '1d', // rotate daily
  path: path.resolve(__dirname, '..', 'log'),
});

morgan.token('ip', (req) => req.headers['x-forwarded-for'] || req.connection.remoteAddress);

morgan.token('user', (req) => {
  if (req.user) return req.user;
  return '-';
});

module.exports = morgan(':ip ":user" [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"', { stream: accessLogStream });

这里是我可以在我的日志文件中找到的示例(它是您必须查看的日期级别)。

2021-10-03-access.log

:ip ":user" [01/Oct/2021:07:30:52 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
...
...
:ip ":user" [02/Oct/2021:23:56:26 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"

2021-10-04-access.log

:ip ":user" [03/Oct/2021:00:01:26 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
...
...
:ip ":user" [03/Oct/2021:23:56:26 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"

2021-10-05-access.log

:ip ":user" [04/Oct/2021:00:01:26 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
...
...
:ip ":user" [05/Oct/2021:06:03:02 +0000] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"

我在rotating-file-stream doc 上看到,如果我们在间隔参数中输入“1d”,它会在每个午夜轮换一次,但也许我忘记了什么。

提前感谢您的关注和未来的答案。

【问题讨论】:

    标签: node.js morgan


    【解决方案1】:

    我忘记了文件名生成器的一个条件和一个参数

    function logFilename(time) {
      if (!time) return 'access.log';
      return `${format(time, 'yyyy-MM-dd')}-access.log`;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 2015-09-04
      • 1970-01-01
      • 2021-04-27
      • 2016-12-01
      • 1970-01-01
      • 2017-02-17
      • 2021-08-02
      • 2013-08-01
      相关资源
      最近更新 更多