Подтвердить что ты не робот

Какова наилучшая практика для журналирования expressjs?

Я создаю приложение на основе expressjs, и я хотел бы записывать в него все события. Я мог бы найти winston, который кажется крутым. В любом случае, я ищу способ подключения к моему приложению expressjs.

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

Моя текущая ситуация:

server.js (я хотел бы регистрировать HTTP-запросы на этом уровне)

var express = require('express');
var app = express();
var fs = require('fs');

// Post parser
app.configure(function(){
    app.use(express.bodyParser());
});

// Load routes
require('fs').readdirSync(__dirname + '/routes').forEach(function(file) {
    require(__dirname + '/routes/' + file)(app);
});

// 404: Not found
app.use(function(req, res, next){
    res.json(404, {ERROR: 'Page not found.'});
});

// 500: Error reporing
app.use(function(err, req, res, next){
    console.error(err.stack);
    res.json(500, {ERROR: 'Internal server error.'} );
});

// Startup new server
app.listen(900);

<сильные > маршруты /something.js

var something = require(__dirname + '/../controller/something.js');

module.exports = function(app) {
    app.get('/v1/something', function(req, res, next) { new something().getAll(req, res, next); });
};

controller/something.js (я бы хотел использовать тот же журнал для ведения журнала отладки)

/**
 * Constructor
 *
 */
function Something() {
};

/**
 * Get all the data
 *
 */
Something.prototype.getAll = function(req, res, next) {
    // I want to log some very important information here
    res.json({result: true, data: ['hello', 'hi', 'ciao', 'buf']});
}

module.exports = Something;

Другая вещь, о которой я думаю, - это регистрировать все события в функциях, вызываемых из контроллеров (например, моделей или других библиотек).

Итак, я думаю, хороший способ может создать некоторую библиотеку журналов, которая будет вызываться с помощью:

var logger = require(__dirname + '/../libraries/logger.js');

содержащий определение регистратора. Другая проблема, которую я не знаю, как решить, - это префикс данных. Вы знаете, у меня много одновременных запросов, и я хотел бы видеть, какое сообщение отладки вызывается каждым запросом.

4b9b3361

Ответ 1

Мы используем winston, это, вероятно, самый надежный пакет регистрации.

Мы закончили настройку именно так, как вы предложили. Создание общей библиотеки, используемой для обертывания объекта журнала вокруг наших определений и транспортов, а затем обработки любых других объектов, с которыми мы хотим обрабатывать по-разному.

https://gist.github.com/rtgibbons/7354879

Ответ 2

Если вы используете экспресс, вы можете посмотреть express-winston. Затем вы можете использовать winston в качестве промежуточного программного обеспечения и легко записывать запросы/ошибки, не делая ваш код грязным...

Ответ 3

Мне нравится следующее ведение журнала в стиле Rails:

[2017-11-02T11:13:54.545 #07738a81] Started GET /api/url for 10.0.0.1
[2017-11-02T11:13:54.550 #07738a81] Completed 200 31739 in 5.635 ms

В приведенном ниже коде

addRequestId = require('express-request-id')(setHeader: false)
app.use(addRequestId)

morgan = require('morgan')
morgan.token('id', (req) -> req.id.split('-')[0])

app.use(morgan(
  "[:date[iso] #:id] Started :method :url for :remote-addr",
  immediate: true))

app.use(morgan("
  [:date[iso] #:id] Completed :status :res[content-length] in :response-time ms"))

app.use('/api', router)