PHP трассировка в отчет об ошибках в стекдрайвере при использовании монолога - PullRequest
0 голосов
/ 26 октября 2018

Привет, у меня возникла проблема при использовании стандарта GAE PHP с отчетом об ошибках в стекдрайвере.

В настоящее время у нас есть стратегия ведения журналов, которая использует монолог для печати сообщений об ошибках на каналы stderr и stdout на стекдрайвере, что позволяет нам использовать уровни ведения журнала, которые правильно отображаются на консоли ведения журнала драйвера стека.

Проблема в том, что репортер ошибок стекадрайвера не обнаруживает следы стека, выбрасываемые в поток stderr (при использовании функции ошибки / критического в классе ниже). Документы GCP говорят, что они должны поднять это автоматически (https://cloud.google.com/error-reporting/docs/setup/app-engine-standard-environment).

Пожалуйста, помните, что я не являюсь разработчиком PHP, поэтому способ написания этой стратегии может быть не самым оптимальным или правильным ...

use Google\Cloud\Logging\LoggingClient as GCPLoggerClient;
use Monolog\Handler\PsrHandler;
use Monolog\Logger as MonoLogger;
use Psr\Log\LogLevel;

class GCPLogger
{
    private $stderrLog;
    private $stdoutLog;
    private $projectId;

    public function __construct(string $projectId)
    {
        $this->projectId = $projectId;

        $gcpLogger = new GCPLoggerClient([
            'projectId' => $this->projectId
        ]);

        $this->stderrLog = new MonoLogger('stderr');
        $this->stdoutLog = new MonoLogger('stdout');

        $stderr = $gcpLogger->psrLogger('stderr');
        $stdout = $gcpLogger->psrLogger('stdout');

        $this->stderrLog->pushHandler(new PsrHandler($stderr));
        $this->stdoutLog->pushHandler(new PsrHandler($stdout));
    }

    public function debug($log)
    {
        $this->stdoutLog->debug($log);
    }

    public function info($log)
    {
        $this->stdoutLog->info($log);
    }

    public function warning($log)
    {
        $this->stderrLog->warning($log);
    }

    public function error($log)
    {
        $this->stderrLog->error($log);
    }

    public function critical($log)
    {
        $this->stderrLog->critical($log);
    }
}
...