Como formatar erros no Stackdriver Logging

Ao registrar dados de erro do App Engine, Compute Engine e Google Kubernetes Engine, o único requisito é que a entrada de registro contenha a mensagem de erro completa e o rastreamento de pilha. Registre-os como um textPayload com várias linhas ou no campo message do jsonPayload. Consulte a referência do LogEntry para ver mais detalhes. Siga também as instruções de configuração de acordo com seu idioma e sua plataforma.

Ao enviar dados de erro por meio do Stackdriver Logging, é necessário usar a estrutura JSON a seguir.

Representação JSON

{
  "eventTime": string,
  "serviceContext": {
    "service": string,     // Required.
    "version": string
  },
  "message": string,       // Required. Should contain the full exception
                           // message, including the stack trace.
  "context": {
    "httpRequest": {
      "method": string,
      "url": string,
      "userAgent": string,
      "referrer": string,
      "responseStatusCode": number,
      "remoteIp": string
    },
    "user": string,
    "reportLocation": {    // Required if no stack trace in 'message'.
      "filePath": string,
      "lineNumber": number,
      "functionName": string
    }
  }
}

Exemplos

Os payloads a seguir serão processados corretamente pelo Error Reporting se forem enviados à API Stackdriver Error Reporting ou registrados em LogEntry.jsonPayload:

Payload com o comando message que contém um rastreamento de pilha:

{
  "serviceContext": {
    "service": "frontend",
    "version": "bf6b5b09b9d3da92c7bf964ab1664fe751104517"
  },
  "message": "com.example.shop.Template$CartDiv retrieveCart: Error\njava.lang.IndexOutOfBoundsException: Index: 4, Size: 4\n\tat java.util.ArrayList.rangeCheck(ArrayList.java:635)\n\tat java.util.ArrayList.get(ArrayList.java:411)\n\tat com.example.shop.Cart.retrieve(Cart.java:76)\n\tat com.example.shop.Cart.generate(Cart.java:55)\n\tat com.example.shop.Template$CartDiv.retrieveCart(Template.java:113)\n\tat com.example.shop.Template.generate(Template.java:22)\n\tat com.example.shop.CartServlet.doGet(CartServlet.java:115)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:717)\n",
  "context": {
    "httpRequest": {
      "method": "GET",
      "url": "http://example.com/shop/cart",
      "responseStatusCode": 500
    },
    "user": "9f32f587135aa6774e78ed30fbaabcce3ec5528f"
  }
}

Payload com message sem rastreamento de pilha. O comando reportLocation é necessário:

{
  "serviceContext": {"service": "worker"},
  "message": "Cannot process job: Missing attribute 'userId'",
  "context": {
    "reportLocation": {
      "filePath": "cleanup.js",
      "lineNumber": 42,
      "functionName": "processJob"
    }
  }
}

Veja mais comandos para soluções de problemas na página de suporte e solução de problemas.

Campos

Nome do campo Tipo Descrição Observações
eventTime string

O horário em que o evento ocorreu de acordo com o relatório de erros. Se o relatório não tiver um carimbo de data/hora, o horário usado será aquele informado pelo sistema do Error Reporting.

Um carimbo de data/hora no formato UTC “Zulu” RFC 3339, medido com precisão de nanossegundos. Exemplo: "2014-10-02T15:01:23.045123456Z".

Opcional
serviceContext object O contexto do serviço para o qual esse erro foi relatado. Obrigatório
serviceContext.service string

Um identificador de serviço, como o nome do executável, o job ou o nome do serviço do Google App Engine. É recomendável que esse campo tenha um número baixo de valores relativamente estáveis ao longo do tempo, ao contrário do comando version, que pode ser alterado sempre que o novo código for implantado.

Obrigatório
serviceContext.version string Representa a versão do código-fonte fornecido pelo desenvolvedor, que representa o rótulo de uma versão de um SHA-1 hash do Git, por exemplo. Se o desenvolvedor não forneceu uma versão, o valor é definido como default. Para o ambiente padrão do App Egine, a versão é definida como a mesma do aplicativo. Opcional
message string A mensagem de erro.
Se nenhum comando "context.reportLocation" for fornecido, a mensagem deve conter um cabeçalho (que geralmente consiste no nome do tipo da exceção e na mensagem de erro) e um rastreamento de pilha de exceção em uma das linguagens e em um dos formatos de programação compatíveis.
As linguagens compatíveis são: Java, Python, JavaScript, Ruby, C#, PHP e Go.
Os formatos de rastreamento de pilha compatíveis são:
Obrigatório
context object Os dados sobre o contexto em que o erro ocorreu. Opcional
context.httpRequest object A solicitação HTTP processada quando o erro foi acionado. Opcional
context.httpRequest.method string A solicitação HTTP, como GET, POST etc. Opcional
context.httpRequest.url string O URL da solicitação. Opcional
context.httpRequest.userAgent string As informações do agente de usuário fornecidas com a solicitação. Opcional
context.httpRequest.referrer string As informações de referência fornecidas com a solicitação. Opcional
context.httpRequest.responseStatusCode number O código de status de resposta HTTP para a solicitação. Opcional
context.httpRequest.remoteIp string O endereço IP a partir do qual se originou a solicitação. Ele pode ser IPv4, IPv6 ou um token derivado do endereço IP, dependendo dos dados fornecidos no relatório de erros. Opcional
context.user string O usuário que causou ou foi afetado pela falha. Pode ser um ID de usuário, um endereço de e-mail ou um token arbitrário que identifica o usuário exclusivamente. Ao enviar um relatório de erros, deixe esse campo em branco se o usuário não estava conectado. Nesse caso, o sistema do Error Reporting usará outros dados, como endereço IP remoto, para diferenciar os usuários afetados. Veja affected_users_count em ErrorGroupStats. Opcional
context.reportLocation object O local no código-fonte, onde foi decidido relatar o erro, geralmente é o lugar em que o erro foi registrado. No caso de uma exceção registrada, o local seria a linha fonte em que a exceção foi registrada, geralmente próximo ao local em que ela foi identificada. Opcional
context.reportLocation.filePath string O nome do arquivo fonte pode incluir um caminho relativo truncado ou um caminho completo de uma máquina de produção. Opcional
context.reportLocation.lineNumber number "1-based. 0" indica que o número da linha é desconhecido. Opcional
context.reportLocation.functionName string O nome legível de uma função ou método. O valor pode incluir contexto opcional, como o nome da classe ou do pacote. Por exemplo, my.package.MyClass.method no caso da linguagem Java. Opcional
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Stackdriver Error Reporting Documentation