Como configurar o Error Reporting para PHP

Como ativar a biblioteca

É possível enviar relatórios de erros para o Error Reporting a partir de aplicativos PHP usando a biblioteca do Error Reporting para PHP.

O Error Reporting é integrado a alguns serviços do Google Cloud, como App Engine, Compute Engine e Google Kubernetes Engine. Essa ferramenta exibe os erros registrados no Cloud Logging por aplicativos em execução nesses serviços. Para mais informações, consulte a seção Como executar no Google Cloud Platform nesta página.

Também é possível enviar dados de erros para o Error Reporting usando o Logging. Para mais informações sobre os requisitos de formatação de dados, leia Como formatar mensagens de erro no Logging (em inglês).

Antes de começar

  1. Faça login na sua conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Cloud, na página do seletor de projetos, selecione ou crie um projeto do Cloud.

    Acessar a página do seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como confirmar se a cobrança está ativada para o seu projeto.

  4. Ative a Error Reporting API .

    Ative a API

Instalar a biblioteca de cliente

Com a biblioteca do Error Reporting para PHP, você pode monitorar e visualizar os erros relatados por aplicativos em PHP que estiverem em execução em praticamente qualquer lugar.

Para mais informações sobre a instalação, leia a documentação da biblioteca do Error Reporting para PHP (em inglês). Além disso, use o rastreador de problemas (em inglês) para informá-los.

Como configurar a biblioteca de cliente

É possível personalizar o comportamento da biblioteca do Error Reporting para PHP. Consulte a configuração da biblioteca para ver uma lista das opções possíveis.

Como relatar erros

1. Instale as bibliotecas de nuvem com o seguinte comando:

$ composer require google/cloud-error-reporting
1. Adicione a seguinte linha ao seu php.ini, em que PROJECT_DIR é o caminho absoluto para o diretório raiz do seu projeto:
auto_prepend_file='PROJECT_DIR/vendor/google/cloud-error-reporting/src/prepend.php'
1. Defina a variável de ambiente GOOGLE_CLOUD_PROJECT para o nome do seu projeto do Google Cloud.

Esse arquivo inicial instalará um gerenciador de exceções e um gerenciador de erros que enviarão os erros automaticamente ao Error Reporting.

Como executar no Google Cloud

O uso da biblioteca do Error Reporting para PHP exige o papel Gravador do Error Reporting do gerenciamento de identidade e acesso. Por padrão, a maioria das plataformas de computação do Google Cloud concede esse papel.

É possível configurar o Error Reporting para PHP nos seguintes ambientes do Google Cloud.

Ambiente flexível do App Engine

O App Engine concede o papel Gravador do Error Reporting (em inglês) por padrão.

A biblioteca do Error Reporting para PHP pode ser usada sem a necessidade de fornecer credenciais explicitamente.

Para ativar o Error Reporting no ambiente flexível do App Engine, siga estas etapas:

  1. Instale as bibliotecas necessárias com o comando a seguir:

    $ composer require google/cloud-error-reporting
  2. Adicione a seguinte linha à seção runtime_config em app.yaml:

enable_stackdriver_integration: true

Em seguida, a biblioteca coleta automaticamente todos os erros e exceções não identificadas no Error Reporting. Se você estiver usando uma biblioteca da Web que instala os próprios gerenciadores de exceção, consulte a seção Integrações de framework para mais informações.

Google Kubernetes Engine

No GKE, você precisa adicionar o escopo de acesso cloud-platform ao criar o cluster, como mostra este exemplo de comando:

gcloud container clusters create example-cluster-name --scopes https://www.googleapis.com/auth/cloud-platform

Compute Engine

Ao usar instâncias de VM do Compute Engine, adicione o escopo de acesso cloud-platform a cada instância. Ao criar uma nova instância por meio do Console do Google Cloud, é possível adicionar o escopo na seção Identidade e acesso à API do painel Criar instância. Use a conta de serviço padrão do Compute Engine ou outra de sua escolha e selecione Permitir acesso completo a todas as APIs do Cloud na seção Identidade e acesso à API. Seja qual for a conta de serviço selecionada, verifique se ela recebeu o papel Gravador do Error Reporting (em inglês) na seção IAM e administrador do Console do Cloud.

Execução local e em outro lugar

Para usar a biblioteca do Error Reporting para PHP fora do Google Cloud, incluindo a execução da biblioteca na sua própria estação de trabalho, nos computadores do seu data center ou nas instâncias de VM de outro provedor de nuvem, forneça as credenciais da conta de serviço e o ID do projeto do Google Cloud diretamente para a biblioteca do Error Reporting para PHP.

É possível criar e receber credenciais da conta de serviço manualmente. Ao especificar o campo Papel, use o papel de gravador do Error Reporting. Para mais informações sobre os papéis de gerenciamento de identidade e acesso, consulte o Guia de controle de acesso.

Como visualizar relatórios de erros

Após a implantação, é possível visualizar os relatórios de erros no painel do Error Reporting no Console do Cloud.

Acessar o painel do Error Reporting

Para mais informações, consulte Como visualizar erros.

Integrações de biblioteca

Algumas bibliotecas da Web substituem o gerenciador de exceções. Veja a seguir exemplos para ativar o Error Reporting com o Symfony e o Laravel. Para outras estruturas, você pode usar Google\Cloud\ErrorReporting\Bootstrap::exceptionHandler como o manipulador de exceção.

Laravel

Editar a função report no arquivo app/Exceptions/Handler.php da seguinte maneira:

public function report(Exception $exception)
{
    if (isset($_SERVER['GAE_SERVICE'])) {
        // Ensure Stackdriver is initialized and handle the exception
        Bootstrap::init();
        Bootstrap::exceptionHandler($exception);
    } else {
        parent::report($exception);
    }
}

Também é preciso adicionar uma instrução use de uma linha no início do arquivo:

use Google\Cloud\ErrorReporting\Bootstrap;

Symfony

Crie um novo arquivo src/AppBundle/EventSubscriber/ExceptionSubscriber.php com o seguinte conteúdo:

// src/AppBundle/EventSubscriber/ExceptionSubscriber.php
namespace AppBundle\EventSubscriber;

use Google\Cloud\ErrorReporting\Bootstrap;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class ExceptionSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        // return the subscribed events, their methods and priorities
        return [KernelEvents::EXCEPTION => [
            ['logException', 0]
        ]];
    }

    public function logException(GetResponseForExceptionEvent $event)
    {
        $exception = $event->getException();
        Bootstrap::exceptionHandler($exception);
    }
}