【问题标题】:How do I write to the Node.js Connect/Express logger?如何写入 Node.js Connect/Express 记录器?
【发布时间】:2012-10-18 20:28:07
【问题描述】:

我有一个 Express 项目,我已将其设置为记录到文件:

logPath = '/mnt/log/api.log'
logfile = fs.createWriteStream logPath, {flags: 'a'} 

loggingOptions = 
  format: 'default'
  stream: logfile

app.use express.logger(loggingOptions)

这适用于记录请求,但我想将自己的消息添加到日志中,但我不知道如何。 console.log 没有被重定向,并且似乎没有创建我可以写入的“记录器”对象。

那么我唯一的选择是传递对文件流的引用并写入吗?

【问题讨论】:

  • 可以将流传递给您自己制作的 express 和 logger 对象...如果您愿意在对象之间共享文件句柄,无论如何。
  • Gregory,您找到问题的答案了吗?我讨厌必须初始化我自己的记录器,尤其是当我知道有一个记录器就在幕后。

标签: node.js express connect


【解决方案1】:

我不知道如何完全按照您的要求做,但这就是我所做的,到目前为止效果很好。

我配置了 express 记录器(如果您正在寻找文档,实际上是连接记录器),如下所示,所有日志输出都发送到 stdout。我可以使用 console.log("blah blah") 打印到相同的输出。

app.use(express.logger("default"));

在生产服务器上,我将节点的所有输出重定向到日志文件。

这在开发过程中也很有效,因为我在 shell 窗口中运行 node 并且可以看到所有相同的输出。 (实际上我在开发过程中使用 express.logger("dev") ,因为输出对于开发工作来说更干净。)

【讨论】:

【解决方案2】:

您可以创建自己的日志中间件:

app.use (req, res, next) ->
   logFile.write "anything you want"
   next()

【讨论】:

    【解决方案3】:

    像其他中间件一样定义错误处理中间件,除了使用四个参数而不是三个,特别是使用签名(err、req、res、next)):

        app.use(function(err, req, res, next){
      console.error(err.stack);
      res.status(500).send('Something broke!');
    });
    

    http://expressjs.com/guide/error-handling.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-15
      • 2012-04-27
      • 2011-08-13
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多