使用 exec 在 node js 中从 stdout(php - monolog) 收集和格式化日志

collect and format logs from stdout(php - monolog) in node js with exec

我的 PHP 来自 node.js 的电话是:

const process = exec('php ' + phpScriptPath, (err, phpResponse, stderr) => {

            if (err){
                this.logger.error('failed:' , err);
            }
        });

        process.stdout.on('data', (data) => {
            this.logger.info(data.toString());
        });

我正在使用 monolog 从 PHP 脚本发送日志,如下所示

日志如下所示:

{"name":"node","environment":"development","hostname":"local","level":50,"msg":"{\"message\":\"log message\",\"context\":{\"error\":\"error message\"},\"level\":400,\"level_name\":\"ERROR\",\"extra\":[]}\n","time":"2019-05-05T06:38:26.147Z","v":0}

使用班扬, 我如何格式化此消息以使其更具可读性

PHP 独白格式化程序:

 $formatter = new \Monolog\Formatter\JsonFormatter();
        $streamHandler = new \Monolog\Handler\StreamHandler('php://stdout', \Monolog\Logger::DEBUG);
        $streamHandler->setFormatter($formatter);
        $log->pushHandler($streamHandler);

2- Php 有不同级别的日志,我如何检查节点中的日志级别,我能否在 stdout 中格式化消息并获取日志级别。

\"level_name\":\"ERROR\" 。例如 所以我会找到 "ERROR" 字符串

3- 我怎样才能适应节点中的日志级别和 php。 如果我的节点日志级别是 "error",我将无法打印标准输出日志,因为我的代码是。 "this.logger.error()"。我需要比硬编码日志更动态的东西

对于我的第二个问题,我找到了解决方案:如果我得到 PHP 日志作为 JSON 字符串,我就可以使用标准输出中的以下内容:

 var phplog = JSON.parse(data);
 console.log(phplog.level_name)
// will print ERROR