Geração de registros

Ao desenvolver qualquer tipo de app, é comum registrar informações para ajudar a diagnosticar falhas durante o desenvolvimento, para identificar e diagnosticar problemas de clientes e para outras finalidades.

O Apps Script tem três mecanismos diferentes de geração de registros:

  • O registro de execução integrado do Apps Script. Esse registro é leve e transmite em tempo real, mas persiste apenas por um curto período.

  • A interface do Cloud Logging no Console para desenvolvedores, que fornece registros que são mantidos por muitos dias após a criação.

  • A interface do Error Reporting no Play Console, que coleta e registra erros que ocorrem durante a execução do script.

Eles são descritos nas seções a seguir. Além desses mecanismos, você também pode criar seu próprio código logger que, por exemplo, grava informações em uma planilha de geração de registros ou em um banco de dados JDBC (links em inglês).

Usar o registro de execução do Apps Script

Uma abordagem básica para a geração de registros no Apps Script é usar o registro de execução integrado. Para ver esses registros, clique em Registro de execução na parte superior do editor. Quando você executa uma função ou usa o depurador, os registros são transmitidos em tempo real.

É possível usar os serviços de geração de registros Logger ou console no registro de execução integrado.

Esses registros destinam-se a verificações simples durante o desenvolvimento e a depuração e não permanecem por muito tempo.

Por exemplo, considere esta função:

utils/logging.gs
/**
 * Logs Google Sheet information.
 * @param {number} rowNumber The spreadsheet row number.
 * @param {string} email The email to send with the row data.
 */
function emailDataRow(rowNumber, email) {
  console.log('Emailing data row ' + rowNumber + ' to ' + email);
  try {
    const sheet = SpreadsheetApp.getActiveSheet();
    const data = sheet.getDataRange().getValues();
    const rowData = data[rowNumber - 1].join(' ');
    console.log('Row ' + rowNumber + ' data: ' + rowData);
    MailApp.sendEmail(email, 'Data in row ' + rowNumber, rowData);
  } catch (err) {
    // TODO (developer) - Handle exception
    console.log('Failed with error %s', err.message);
  }
}

Quando esse script é executado com as entradas "2" e "john@example.com", os seguintes registros são gravados:

[16-09-12 13:50:42:193 PDT] Enviando por e-mail a linha 2 de dados para joao@example.com
[16-09-12 13:50:42:271 PDT] Dados da linha 2: custo 103,24

Cloud Logging

O Apps Script também fornece acesso parcial ao serviço Cloud Logging do Google Cloud Platform (GCP). O Cloud Logging é a melhor opção quando você precisa de registros que persistem por vários dias ou de uma solução de geração de registros mais complexa para um ambiente de produção multiusuário. Consulte Cotas e limites do Cloud Logging para retenção de dados e outros detalhes de cota.

Se você precisar de mais cota, envie uma solicitação de cota do Google Cloud Platform. Isso exige que você tenha acesso ao projeto do Cloud Platform usado pelo script.

Como usar o Cloud Logging

Os registros do Google Cloud são anexados ao projeto do Google Cloud associado ao seu Apps Script. Confira uma versão simplificada desses registros no painel do Apps Script.

Para aproveitar ao máximo o Cloud Logging e os recursos dele, use um projeto padrão do Google Cloud com seu projeto de script. Isso permite acessar os registros do Cloud diretamente no Console do GCP e oferece mais opções de visualização e filtragem.

Ao gerar registros, é recomendável evitar o registro de informações pessoais sobre o usuário, como endereços de e-mail. Os registros do Cloud são rotulados automaticamente com chaves de usuário ativas que podem ser usadas para localizar mensagens de registro de um usuário específico quando necessário.

É possível registrar strings, strings formatadas e até objetos JSON usando as funções fornecidas pelo serviço console do Apps Script.

O exemplo a seguir mostra como usar o serviço console para registrar informações nas Operações do Cloud.

utils/logging.gs
/**
 * Logs the time taken to execute 'myFunction'.
 */
function measuringExecutionTime() {
  // A simple INFO log message, using sprintf() formatting.
  console.info('Timing the %s function (%d arguments)', 'myFunction', 1);

  // Log a JSON object at a DEBUG level. The log is labeled
  // with the message string in the log viewer, and the JSON content
  // is displayed in the expanded log structure under "jsonPayload".
  const parameters = {
    isValid: true,
    content: 'some string',
    timestamp: new Date()
  };
  console.log({message: 'Function Input', initialData: parameters});
  const label = 'myFunction() time'; // Labels the timing log entry.
  console.time(label); // Starts the timer.
  try {
    myFunction(parameters); // Function to time.
  } catch (e) {
    // Logs an ERROR message.
    console.error('myFunction() yielded an error: ' + e);
  }
  console.timeEnd(label); // Stops the timer, logs execution duration.
}

Chaves do usuário ativo

As chaves de usuário ativo temporário são uma maneira conveniente de identificar usuários únicos nas entradas do Cloud Log sem revelar a identidade deles. As chaves são feitas por script e mudam aproximadamente uma vez por mês para oferecer mais segurança, caso um usuário revele sua identidade a um desenvolvedor, por exemplo, ao relatar um problema.

As chaves de usuário ativas temporárias são superiores aos identificadores de geração de registros, como os endereços de e-mail, porque:

  • Você não precisa adicionar nada ao registro, eles já estão lá!
  • Eles não exigem autorização do usuário.
  • Eles protegem a privacidade do usuário.

Para encontrar chaves de usuário ativas temporárias nas entradas do Cloud Log, consulte os registros do Cloud no console do Google Cloud. Só é possível fazer isso se o projeto de script estiver usando um projeto padrão do Google Cloud a que você tem acesso. Depois de abrir o projeto do Google Cloud no console, selecione uma entrada de registro de interesse e expanda-a para visualizar metadata > labels > script.googleapis.com/user_key.

Você também pode receber a chave de usuário ativa temporária chamando Session.getTemporaryActiveUserKey() no seu script. Uma maneira de usar esse método é exibir a chave ao usuário enquanto ele executa o script. Em seguida, os usuários podem incluir as chaves ao relatar problemas para identificar os registros relevantes.

Geração de registros de exceções

A geração de registros de exceções envia exceções não processadas no código do projeto de script para o Cloud Logging, junto com um stack trace.

Para visualizar os registros de exceção, siga as etapas abaixo:

  1. Abra o projeto do Apps Script.
  2. À esquerda, clique em Execuções .
  3. Na parte de cima, clique em Adicionar um filtro > Status.
  4. Marque as caixas de seleção Com falha e Tempo limite atingido.

Também é possível ver as exceções registradas no Console do GCP se o projeto de script usar um projeto padrão do Google Cloud a que você tem acesso.

Ativar registro de exceções

A geração de registros de exceções é ativada por padrão para novos projetos. Para ativar a geração de registros de exceções para projetos mais antigos, siga as etapas abaixo:

  1. Abra o projeto de script.
  2. À esquerda, clique em Configurações do projeto .
  3. Marque a caixa de seleção Registrar exceções não capturadas nas Operações do Cloud.

Error Reporting

A geração de registros de exceções integra-se automaticamente ao Cloud Error Reporting, um serviço que agrega e exibe erros produzidos no seu script. É possível ver os relatórios de erros do Cloud no console do Google Cloud. Se você for solicitado a "Configurar o Error Reporting", isso significa que seu script ainda não registrou exceções. Nenhuma configuração é necessária além de ativar a geração de registros de exceções.

Requisitos do Logging

Não há requisitos para usar o registro de execução integrado.

Veja uma versão simplificada dos registros do Cloud no painel do Apps Script. No entanto, para aproveitar ao máximo o Cloud Logging e o relatório de erros, é necessário ter acesso ao projeto do GCP do script. Isso só é possível se o projeto de script usa um projeto padrão do Google Cloud.