为作为 systemd 服务运行的 Nodejs 应用程序设置日志优先级

问题描述 投票:0回答:1

我有一个作为 systemd 服务运行的应用程序。

可以使用journalctl访问日志,这正是我想要的,但是尽管节点记录console.error> stderr,但似乎无法使用-p(优先级)过滤器从console.log条目中识别console.error。

似乎所有日志都没有优先级地发送:

journalctl -fu my-app.* -p 3

尝试显示错误日志 (p=3) 会导致没有日志,尽管事实上存在错误日志。

如何配置nodejs以输出具有优先级的日志,以便我可以使用journalctl过滤错误和正常日志文件?

node.js systemd
1个回答
2
投票

您可以通过在所有日志前面添加

<priority>
来让 systemd 设置正确的优先级,如下所示:

function jclogs(){
  
  var levels = {
    alert   : 1,
    error   : 3,
    warn    : 4,
    info    : 6,
    log     : 7
  }
  
  for(var level in levels){
    const pri = levels[level];
    console[level] = function(...args) {
      var line = [`<${pri}>`];
      args.map(function(arg){
        if(typeof arg != 'string') try {arg = JSON.stringify(arg)} 
        catch(e){};
        line.push(arg); 
      })
      process.stdout.write(`${line.join(' ')}\n`); 
    }
  }
}

这也尝试对任何数据进行字符串化。

像这样添加优先级前缀是有效的,因为如果您为消息添加这样的优先级前缀,systemd 将从消息中读取优先级:“ 消息的其余部分”

文档: https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html#SyslogLevelPrefix=

© www.soinside.com 2019 - 2024. All rights reserved.