собирать и форматировать логи из stdout (php - monolog) в узле js с помощью exec - PullRequest
0 голосов
/ 05 мая 2019

Мой 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());
        });

Я отправляю логи из скрипта 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 монолог форматер:

 $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- Как я могу вписаться между уровнем журнала в узле и php. если мой уровень журнала узла - «ошибка», я не смогу печатать журналы стандартного вывода, потому что мой код -. "this.logger.error()". Мне нужно что-то более динамичное, чем жестко закодированные журналы

1 Ответ

0 голосов
/ 05 мая 2019

хорошо, для моего второго вопроса я нашел решение: если я получаю лог PHP в виде строки JSON, я просто могу использовать следующее из stdout:

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