Привет, у меня возникла проблема при использовании стандарта 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);
}
}