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

时间:2018-07-24 17:08:18

标签: node.js express logging morgan

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

我已经编写了一个快速应用程序,以将用户身份验证到我们订阅的资源中,并且需要向该应用程序添加日志记录。我已经将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添加到摩根格式的末尾,例如:

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

2 个答案:

答案 0 :(得分:1)

摩根实际上写了一个新行:https://github.com/expressjs/morgan/blob/master/index.js#L130

请注意,这是Unix换行符。如果您使用的是Windows,则应使用会呈现非Windows换行符(即非记事本)的应用程序读取文件。

答案 1 :(得分:0)

好问题。我也在寻找那个。

确保已安装最新的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(' ')
}));

希望这会有所帮助。 谢谢。