我有一个作为 systemd 服务运行的应用程序。
可以使用journalctl访问日志,这正是我想要的,但是尽管节点记录console.error> stderr,但似乎无法使用-p(优先级)过滤器从console.log条目中识别console.error。
似乎所有日志都没有优先级地发送:
journalctl -fu my-app.* -p 3
尝试显示错误日志 (p=3) 会导致没有日志,尽管事实上存在错误日志。
如何配置nodejs以输出具有优先级的日志,以便我可以使用journalctl过滤错误和正常日志文件?
您可以通过在所有日志前面添加
<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=