expressjs日志的最佳做法是什么?

我正在build立一个基于expressjs的应用程序,我想logging下所有的事件。 我可以find温斯顿,这似乎很酷。 无论如何,我正在寻找一种方式来连接到我的expressjs应用程序。

我也想要的是在应用程序内部进行日志logging。 我的reqeusts不是那么简单,所以我想logging我的应用程序内的一切(不仅要求)。

我目前的情况:

server.js (我想在这个级别上logginghttp请求)

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

控制器/ something.js (我想使用相同的logging器进行debugging日志logging)

 /** * 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; 

我正在考虑的另一件事是logging从控制器(例如模型或其他库)调用的函数中的所有事件。

所以我认为,创build一些logging器库的好方法可能会被调用:

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

包含logging器定义。 另一个我不知道如何解决的问题是如何为数据添加前缀。 你知道,我有很多并发请求,我想看看每个请求调用哪个debugging消息。

我们使用Winston ,这可能是最强大的日志logging软件包。

我们最终完全按照你的build议设置它。 创build一个公用库,用于将logger对象包裹在我们的定义和传输中,然后处理我们想要以不同方式处理的任何其他types的对象。

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

如果您使用快递,您可能需要查看快递 – 温斯顿套餐。 然后,您可以使用winston作为中间件,轻松logging请求/错误,而不会使您的代码混乱…

我喜欢以下Rails风格的日志logging:

 [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)