如何有条件地抑制Express(或Connect)中的日志记录?

时间:2012-06-07 03:16:38

标签: javascript node.js express

当使用作为Connect(以及Express)一部分的记录器中间件时,我希望能够禁用某些请求的记录,比如在响应上设置一个标志或其他东西。

我成功地说:

res.doNotLog = true;

然后,深入logger.js(Connect模块的一部分),我把

if(res.doNotLog) return;

在正确的地方。但当然我不想修改模块本身的代码。有没有什么方法可以在不必破坏模块的情况下发生同样的事情?

修改

这有效:

var app = _express.createServer();

// set 'hello' routing...note that this is before middleware 
// so it won't be logged
app.get('/sayhello', function(req, res) {res.send("hey");});

// configure middleware: logging, static file serving
app.configure(function() {
    app.use(_express.logger());
    app.use(_express.static(__dirname + '/www'));
  });

// set 'goodbye' routing...note that this is after middleware 
// so it will be logged
app.get('/saygoodbye', function(req, res) {res.send("later...");});

1 个答案:

答案 0 :(得分:0)

最明显的事情是在记录器之前为这些请求放置处理程序。这在纯Connect中很容易,不知道如何在Express中执行它,因为很多路由器代码在路由之间共享。如果只有少数此类请求,您可以在堆栈中比app.router更早地处理它们的连接样式。