1

我的 node.js 应用程序中的记录器没有正确记录日期或时间。我使用 morgan 作为日志记录模块,并使用 moment-timezone 正确记录我的时区(太平洋标准时间)中的日期和时间。昨天是按照我设置的格式记录日期和时间的,今天不行。

这是使用时刻时区的摩根日期令牌的代码:

morgan.token('date', (req, res, tz) => {
    return moment().tz("America/Los_Angeles").format('YYYY-MM-DD, HH:mm a');
});

这是我在 morgan.format() 中使用日期标记的代码:

morgan.format('logFormat', '[:date[America/Los_Angeles]], :resource, :remote-addr, :status, :response-time ms');

昨天,我的请求以这种格式记录:

[2018-07-31, 14:57 pm], hoopla, ::1, 401, 104.144 ms

今天一切都像这样记录:

[YYYY-MM-DD, HH:mm a], hoopla, ::1, 401, 45.995 ms

我所做的唯一更改是向应用程序添加新路由,但每个日志中间件都根据正在使用的路由记录到一个单独的文件。有谁知道为什么我的日期令牌不再显示日期?

4

2 回答 2

1

这个问题帮助我解决了我的问题。谢谢!

这对我来说很合适:

morgan.token('date', (req, res, tz) => {
return moment().tz(tz).format('YYYY-MM-DD HH:mm:ss');
})
morgan.format('myformat', :date[Asia/Taipei] | :method | :url | :response-time ms');
    
app.use(morgan('myformat'))
于 2021-05-08T12:04:20.667 回答
1

MomentJS 记录时区的morgan.token('date'...部分对我来说看起来不错!

我敢打赌,这是自定义令牌格式的语法错误。如果您不需要传递参数,根据morgan docs,您可以使用自定义标记格式,只需使用半列,就像这样:date。因此,只需尝试:

morgan.format('logFormat', ':date, :resource, :remote-addr, :status, :response-time ms');
于 2018-08-01T18:21:37.740 回答