【问题标题】:How to do a tail -f on node process.stdout?如何在节点 process.stdout 上执行 tail -f?
【发布时间】:2022-04-15 03:06:55
【问题描述】:

我不是天生的节点开发人员,我有这个项目,我正在尝试调试一些东西。而且我注意到记录器正在记录到 process.stdout .... 我怎样才能在正在运行的节点服务器中 tail -f 这个?

【问题讨论】:

  • node server | tee your-log.txt&; tail -f your-log.txt
  • ? ...我不明白
  • 如果您控制如何启动节点,您可以通过命令行将输出process.stdout重定向到一个文件中,然后在其上执行tail -f
  • 那不是一个选项...不这样做就没有办法看到它吗?

标签: node.js


【解决方案1】:

选项 #1 - 最常见

只需像这样运行您的脚本/服务器:

node ./my-server.js >/path/to/logs/my-server.log 2>&1

然后去尾...

tail -f /path/to/logs/my-server.log

注意:对于生产,您可能还想使用 logrotate 之类的东西。

选项 #2 - 对于黑客

无论您在哪里使用process.stdout.write(msg)console.log(msg),都可以使用process.emit('logger#receiver-id', JSON.stringify({content: msg}))

// sample.js
function doSomething() {
  // console.log('Hello world');
  var msg = 'Hello World !';
  process.emit('logger#catch-all', JSON.stringify({content: msg}))
}
doSomething();
// tail.js
function onPayload(payload) {
  var msg = JSON.parse(payload).content;
  process.stdout.write(msg);
}

function registerEvent() {
  process.on('logger#catch-all', onPayload);
}
registerEvent();

然后你现在可以通过运行(首先)tail.js,然后运行sample.js

此方法只是您可以通过将日志视为事件来执行的操作的一个示例...然后您可以编写自己的容器并根据日志的去向格式化有效负载:标准输出、文件、监控工具...

如果您不想直接使用process.emit(...),则可能必须覆盖console.<method>()

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多