我正在构建一个基于expressjs的应用程序,我想在其中记录所有事件。我可以找到温斯顿,这似乎很酷。无论如何,我正在寻找一种方法将其连接到我的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');
包含记录器定义。我不知道如何解决的另一个问题是如何为数据添加前缀。您知道,我有很多并发请求,我想看看每个请求调用了哪个调试消息。
我们使用winston,它可能是那里最强大的日志记录程序包。
我们最终完全按照您的建议进行了设置。创建一个用于将logger对象包装在我们的定义和传输周围的通用库,然后处理我们希望以不同方式处理的任何其他类型的对象。
https://gist.github.com/rtgibbons/7354879