Express 应用程序中的 Morgan 记录器不会为每个条目创建新行

Morgan logger in an express app doesn't create new lines with each entry

我在让 morgan 记录器模块将每个日志条目写入日志文件的新行时遇到问题。

我已经编写了一个 Express 应用程序来对用户进行身份验证以访问我们订阅的资源,我需要向该应用程序添加日志记录。我已将 morgan 设置为写入文件,但是,日志文件中的每个条目都写入同一行,而不是写入新行。

这是我的代码

//requiring express and morgan
var express = require('express');
var morgan = require('morgan');

//defining the file to write log entries to
var accessLogStream = fs.createWriteStream(path.join('logs', 'access.log'), {flags: 'a'});

//defining what to log with morgan
app.use(morgan(':date[iso], :remote-addr, :status, :response-time ms', {stream: accessLogStream}));

我错过了什么?我尝试将 /n 添加到 morgan 格式的末尾,例如:

app.use(morgan(':date[iso], :remote-addr, :status, :response-time ms /n', {stream: accessLogStream}));

但这导致了一个错误。错误说:

undefined:8
(tokens["response-time](req, res) || "-") + " ms

SyntaxError: Invalid or unexpeceted token

Morgan 实际上换了一行:https://github.com/expressjs/morgan/blob/master/index.js#L130

请注意,这是一个 unix 换行符。如果您在 Windows 上,您应该使用能够呈现非 Windows 换行符(即不是记事本)的应用程序阅读该文件。

好问题。我也在找那个。

确保您安装了最新的 morgan 软件包。

应该这样做:

const express = require('express');
const expressApp = express();
const morgan = require('morgan');

expressApp.use(morgan(function (tokens, req, res) {
    return [
        '-------------------------\n', // <= horizontal line breaker added with every log
        tokens.method(req, res),
        tokens.url(req, res),
        tokens.status(req, res),
        tokens.res(req, res, 'content-length'), '-',
        tokens['response-time'](req, res), 'ms'
    ].join(' ')
}));

希望这对您有所帮助。 谢谢。