Встроенные журналы доступа в node.js(express framework)

Мне было интересно, может ли node.js (или выразить) какой-либо встроенный журнал доступа, например, grails?

У меня есть приложение grails, которое работает на tomcat, и оно автоматически генерирует файл /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?

Спасибо за любую помощь!

Иван

Ответ 1

edit. С выражением 4.0.0 этого решения, по-видимому, уже недостаточно. Ознакомьтесь с ответом от whirlwin для получения обновленного решения.

Вы можете использовать app.use(express.logger());

Документировано здесь: http://www.senchalabs.org/connect/logger.html

Ответ 2

В новых версиях Express ( 4.0.0 на момент написания) регистратор больше не является частью Express, поэтому вам нужно включить его как зависимость вручную. Теперь он называется morgan.

Итак, в package.json добавьте morgan как зависимость:

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

И в вашей конфигурации Express добавьте:

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

Теперь регистрация должна работать более или менее как раньше.: -)

Ответ 3

На данный момент большинство промежуточного программного обеспечения (например, регистратор) больше не связаны с экспресс и должны быть установлены отдельно.

Короткий ответ: Сначала установите morgan:

npm install morgan

Затем используйте его для ведения журнала:

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

Документация здесь.

Ответ 4

Он не встроен, но очень прост в настройке. Вы можете использовать express-winston и добавить в стек промежуточного программного обеспечения. morgan не позволяет вам регистрировать тело запроса, но expressWinston делает:

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

Пример в coffeescript:

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
    }));