19

我想知道node.js(或express框架)是否有任何类型的内置访问日志,例如 grails 有?

我有在 tomcat 上运行的 grails 应用程序,它会自动生成/apache-tomcat-7.0.42/logs/localhost_access_log.2013.10.30.txt文件,其中包含有关请求响应的日志,如下所示:

[30/Oct/2013:00:00:01 +0000] [my-ip-address] [http-bio-8080-exec-18] "GET /my-service/check HTTP/1.0" [200] [took: 1 milis]  

此日志由系统自动写入,我不必担心。

那么node.js呢?

谢谢你的帮助!

伊万

4

4 回答 4

26

在 Express 的较新版本(撰写本文时为4.0.0)中,记录器不再是 Express 的一部分,因此您必须手动将其作为依赖项包含在内。它现在被称为摩根

因此,在 中package.json,添加 morgan 作为依赖项:

"dependencies": {
  ...
  "morgan": "*"
  ...
}

在您的 Express 配置中,添加:

app.use(require('morgan')('dev'));

现在日志记录应该或多或少像以前一样工作。:-)

于 2014-04-17T21:25:45.557 回答
11

到目前为止,大多数中间件(如 logger)不再与 express 捆绑在一起,必须单独安装。

简短回答:首先,安装morgan

npm install morgan

然后用它来记录:

app = express();
var morgan  = require('morgan')
...
app.use(morgan('combined'))

文档在这里

于 2014-08-16T23:09:57.990 回答
10

编辑截至表达,4.0.0这个解决方案显然已经不够了。查看 whirlwin 的答案以获取更新的解决方案。

您可以使用app.use(express.logger());

记录在这里:http ://www.senchalabs.org/connect/logger.html

于 2013-10-30T11:49:31.643 回答
2

它不是内置的,但很容易配置。您可以使用express-winston并添加到 express 中间件堆栈。morgan 不允许您记录请求正文,但 expressWinston 可以:

expressWinston.requestWhitelist.push('body');
expressWinston.responseWhitelist.push('body');

咖啡脚本中的示例:

expressWinston.requestWhitelist.push('body')
expressWinston.responseWhitelist.push('body')
app.use(expressWinston.logger({
      transports: [
        new winston.transports.Console({
          json: true,
          colorize: true
        })
      ],
      meta: true, // optional: control whether you want to log the meta data about the request (default to true)
      msg: "HTTP {{req.method}} {{req.url}}", // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}"
      expressFormat: true, // Use the default Express/morgan request formatting, with the same colors. Enabling this will override any msg and colorStatus if true. Will only output colors on transports with colorize set to true
      colorStatus: true, // Color the status code, using the Express/morgan color palette (default green, 3XX cyan, 4XX yellow, 5XX red). Will not be recognized if expressFormat is true
      ignoreRoute: function (req, res) { return false; } // optional: allows to skip some log messages based on request and/or response
    }));
于 2015-05-14T01:07:49.173 回答