使用exec

时间:2019-05-05 06:50:12

标签: php node.js monolog bunyan

我从node.js发出的PHP调用是:

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}

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

PHP monolog格式化程序:

 $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\”。 所以我会找到“错误”字符串

3-我如何在node和php中的日志级别之间适应。  如果我的节点日志级别为“错误”,则由于我的代码无法打印标准输出日志。 "this.logger.error()"。我需要比动态编码日志更动态的东西

1 个答案:

答案 0 :(得分:0)

对于我的第二个问题,我找到了解决方案:如果我将PHP日志作为JSON字符串获取,则只能使用stdout中的以下内容:

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