Como ler e gravar registros de aplicativos

Visão geral

Quando uma solicitação é enviada para seu aplicativo, um registro de solicitação é gravado automaticamente pelo App Engine. Durante o tratamento da solicitação, seu app também pode gravar registros de aplicativos. Nesta página, você aprenderá a gravar registros do aplicativo, como visualizar registros no console do Google Cloud e como entender os dados de registro de solicitação que o App Engine grava durante a solicitação.

Para informações sobre como fazer o download de dados de registro, consulte Visão geral das exportações de registros.

Comparação entre registros de solicitação e de aplicativo

Há duas categorias de dados de registros: de solicitação e de aplicativos. Os registros de solicitação são gravados automaticamente pelo App Engine para cada solicitação processada pelo seu aplicativo e contêm informações como o código do projeto, a versão HTTP e assim por diante. Para uma lista completa das propriedades disponíveis para os registros de solicitação, consulte RequestLogs. Consulte também a tabela de registros de solicitação para ver as descrições dos campos desses registros.

Cada registro de solicitação contém uma lista de registros de aplicativos (AppLogLine) associada a essa solicitação e retornada no método RequestLogs.getAppLogLines(). Cada registro de aplicativo apresenta a hora em que o registro foi gravado, a mensagem e o nível do registro.

Como gravar registros de aplicativos

O SDK Java do Google App Engine permite que um desenvolvedor registre os seguintes níveis de gravidade:

  • SEVERE
  • AVISO
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

Os níveis de registro INFO, WARNING e SEVERE aparecem nos registros sem configuração extra. Para adicionar outros níveis de geração de registros ao seu aplicativo Java, você precisa adicionar as propriedades do sistema apropriadas ao arquivo appengine-web.xml do projeto e talvez seja necessário modificar o arquivo logging.properties para definir o nível de registro pretendido. Esses dois arquivos são criados quando se inicia um projeto novo do App Engine Java usando o Maven. É possível encontrar esses arquivos nos seguintes locais:

Layout de projeto Maven

Para adicionar níveis de registro diferentes de INFO, WARNING ou SEVERE, edite o arquivo appengine-web.xml para adicionar o seguinte dentro das tags <appengine-web-app>:

    <system-properties>
       <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>

O nível de registro padrão em logging.properties é INFO. Para alterar o nível de registro padrão de todas as classes no seu app, edite o arquivo logging.properties. Por exemplo, é possível alterar .level = INFO para .level = WARNING.

No código do aplicativo, grave mensagens de registro usando a API java.util.logging.Logger. O exemplo abaixo grava uma mensagem de registro de informações:

import java.util.logging.Logger;
//...

public class MyClass {

  private static final Logger log = Logger.getLogger(MyClass.class.getName());
  log.info("Your information log message.");
  //....

Quando o aplicativo é executado, o App Engine registra as mensagens e as disponibiliza no Explorador de registros.

Formato do URL de registro no console do Google Cloud

Veja a seguir um exemplo do formato do URL de registro no Console do Google Cloud:

https://console.cloud.google.com/logs?filters=request_id:000000db00ff00ff827e493472570001737e73686966746361727331000168656164000100

Como ler registros no Console

Para exibir registros gravados por aplicativos executados no ambiente padrão, use o Explorador de registros.

Um registro comum do App Engine contém dados no formato de registro combinado Apache, além de alguns campos especiais do App Engine, como mostra o registro de exemplo a seguir:

192.0.2.0 - test [27/Jun/2014:09:11:47 -0700] "GET / HTTP/1.1" 200 414
"http://www.example.com/index.html"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
"1-dot-calm-sylph-602.appspot.com" ms=195 cpu_ms=42 cpm_usd=0.000046
loading_request=1 instance=00c61b117cfeb66f973d7df1b7f4ae1f064d app_engine_release=

Como entender os campos de registros de solicitação

A tabela abaixo lista os campos em ordem de ocorrência e uma descrição:

Ordem do campo Nome do campo Sempre presente? Descrição
1 Endereço do cliente Sim Endereço IP do cliente. Exemplo: 192.0.2.0
2 Identidade RFC 1413 Não Identidade RFC 1413 do cliente. Quase sempre é o caractere -.
3 Usuário Não Presente somente se o aplicativo usar a API Users e o usuário tiver feito login. Esse valor é a parte "apelido" da Conta do Google, por exemplo, se a Conta do Google for test@example.com, o apelido registrado nesse campo será test.
4 Carimbo de data/hora Sim Carimbo de data/hora da solicitação. Exemplo: [27/Jun/2014:09:11:47 -0700]
5 String de consulta de solicitação Sim Primeira linha da solicitação, contendo método, caminho e versão HTTP. Exemplo: GET / HTTP/1.1
6 Código de status HTTP Sim Código de status de HTTP retornado. Exemplo: 200
7 Tamanho da resposta Sim Tamanho da resposta em bytes. Exemplo: 414
8 Caminho de indicação Não Se não houver indicação, o registro não terá caminho, somente -. Caminho do referenciador de exemplo: "http://www.example.com/index.html".
9 User-agent Sim Identifica o navegador e o sistema operacional para o servidor da Web. Exemplo: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
10 Nome do host Sim O nome do host usado pelo cliente para conectar-se ao aplicativo App Engine. Exemplo : (1-dot-calm-sylph-602.appspot.com)
11 Tempo Sim Tempo total em milissegundos gasto pelo App Engine na solicitação. Esta duração não inclui o tempo gasto entre o cliente e o servidor que executa a instância do seu aplicativo. Exemplo: ms=195.
12 Milissegundos de CPU Sim Milissegundos de CPU necessários para cumprir a solicitação. Esta é a quantidade de milissegundos gasta pela CPU que de fato executa o código do seu aplicativo, usando como valor de referência um Intel x86 de 1,2 GHz. Se a CPU realmente utilizada for mais rápida do que o valor de referência, poderá haver mais milissegundos do que o tempo real definido acima. Exemplo: cpu_ms=42
13 Código de saída Não Presente somente se a instância for desligada depois de receber a solicitação. No formato exit_code=XXX, em que XXX é um número de três dígitos correspondente ao motivo pelo qual a instância foi desligada. Os códigos de saída não são documentados, já que se destinam a ajudar o Google a detectar e corrigir problemas.
14 Custo estimado Sim OBSOLETO. Custo estimado de 1.000 solicitações como esta, em dólares americanos. Exemplo: cpm_usd=0.000046
15 Nome da fila Não O nome da fila de tarefas usada. Presente apenas se o pedido usar uma fila de tarefas. Exemplo: queue_name=default
16 Nome da tarefa Não O nome da tarefa executada na fila de tarefas desta solicitação. Presente somente se a solicitação resultou na fila de uma tarefa. Exemplo: task_name=7287390692361099748
17 Fila pendente Não Presente somente se uma solicitação demorar algum tempo em uma fila pendente. Se tiver vários desses nos seus registros ou se os valores forem altos, pode ser uma indicação de que você precisa de mais instâncias para atender seu tráfego. Exemplo: pending_ms=195
18 Solicitação de carregamento Não Presente somente se a solicitação for de carregamento. Isso significa que uma instância precisou ser iniciada. De preferência, suas instâncias devem estar ativas e íntegras durante o máximo de tempo possível, atendendo a um grande número de solicitações antes de serem recicladas e precisarem ser iniciadas outra vez. Isso significa que você não deve ver muitos desses nos seus registros. Exemplo: loading_request=1.
19 Instância Sim Identificador exclusivo da instância que gerencia a solicitação. Exemplo: instance=00c61b117cfeb66f973d7df1b7f4ae1f064d
20 Versão Sim A versão de lançamento atual do App Engine usada no App Engine de produção:

Cotas e limites

Seu aplicativo é afetado pelas cotas relacionadas a registros abaixo:

  • Dados de registros recuperados pela API Logs.
  • Cota e retenção de ingestão de registros.

Cota para dados recuperados

Os primeiros 100 megabytes de dados de registros recuperados pelas chamadas da API Logs ao dia são gratuitos. Dados com mais de 100 megabytes resultam em cobranças de US$ 0,12/GB.

Cota de ingestão de registros

A geração de registros para aplicativos do App Engine é fornecida pela Observabilidade do Google Cloud. Consulte os Preços de observabilidade do Google Cloud para mais informações sobre custos e limites de geração de registros. Para armazenamento de longo prazo, é possível exportar registros da observabilidade do Google Cloud para o Cloud Storage, o BigQuery e o Pub/Sub.