Gravar e consultar registros


O Logging é uma ferramenta importante para depurar e monitorar códigos. O Cloud Functions oferece a opção de usar o SDK do logger ou o padrão de objeto console para desenvolvimento na Web.

O Cloud Logging é um serviço sujeito a cobranças. Você poderá receber cobranças se exceder a cota sem custo financeiro. Para mais informações, consulte os preços do Cloud Logging.

Como gravar registros

Como usar o SDK do logger do Cloud Functions

O SDK do logger do Cloud Functions fornece uma interface padrão para relatar o status das funções para o Cloud Logging. Você pode usar esse SDK para registrar eventos com dados estruturados, facilitando a análise e o monitoramento.

Importe do subpacote logger:

// All available logging functions
const {
  log,
  info,
  debug,
  warn,
  error,
  write,
} = require("firebase-functions/logger");
  • Os comandos logger.log() têm o nível de registro INFO.
  • Os comandos logger.info() têm o nível de registro INFO.
  • Os comandos logger.warn() têm o nível de registro WARNING.
  • Os comandos logger.error() têm o nível de registro ERROR.
  • Os comandos logger.debug() têm o nível de registro DEBUG.
  • As mensagens internas do sistema têm o nível de registro DEBUG.

Este exemplo demonstra uma função que grava um registro básico:

exports.helloWorld = onRequest((request, response) => {
  // sends a log to Cloud Logging
  log("Hello logs!");

  response.send("Hello from Firebase!");
});

Use vários níveis de registro para vários tipos de registro no código de função. Os dados estruturados podem ser anexados a um registro como o último argumento. Este é um exemplo de como uma função pode usar cada tipo de registro:

exports.getInspirationalQuote = onRequest(async (request, response) => {
  const db = getFirestore();
  const today = new Date();
  const quoteOfTheMonthRef = db
      .collection("quotes")
      .doc(`${today.getFullYear()}`)
      .collection("months")
      .doc(`${today.getMonth()}`);

  const DEFAULT_QUOTE =
      "You miss 100% of the shots you don't take. -Wayne Gretzky";
  let quote;
  try {
    const quoteOfTheMonthDocSnap = await quoteOfTheMonthRef.get();

    // Attach relevant debugging information with debug()
    debug("Monthly quote fetch result", {
      docRef: quoteOfTheMonthRef.path,
      exists: quoteOfTheMonthDocSnap.exists,
      createTime: quoteOfTheMonthDocSnap.createTime,
    });

    if (quoteOfTheMonthDocSnap.exists) {
      quote = quoteOfTheMonthDocSnap.data().text;
    } else {
      // Use warn() for lower-severity issues than error()
      warn("Quote not found for month, sending default instead", {
        docRef: quoteOfTheMonthRef.path,
        dateRequested: today.toLocaleDateString("en-US"),
      });

      quote = DEFAULT_QUOTE;
    }
  } catch (err) {
    // Attach an error object as the second argument
    error("Unable to read quote from Firestore, sending default instead",
        err);

    quote = DEFAULT_QUOTE;
  }

  // Attach relevant structured data to any log
  info("Sending a quote!", {quote: quote});
  response.json({inspirationalQuote: quote});
});

Com logger.write(), é possível gravar entradas de registro com níveis adicionais de gravidade de registro de CRITICAL, ALERT e EMERGENCY. Consulte LogSeverity.

exports.appHasARegression = onRegressionAlertPublished((event) => {
  write({
    // write() lets you set additional severity levels
    // beyond the built-in logger functions
    severity: "EMERGENCY",
    message: "Regression in production app",
    issue: event.data.payload.issue,
    lastOccurred: event.data.payload.resolveTime,
  });
});

Como usar o console.log

A solução recomendada para a geração de registros de uma função é usar o SDK do logger. Em vez disso, é possível usar chamadas de geração de registros padrão em JavaScript, como console.log e console.error, mas primeiro é necessário exigir um módulo especial para corrigir os métodos padrão para funcionar corretamente:

require("firebase-functions/logger/compat");

Depois de exigir o módulo de compatibilidade do logger, é possível usar os métodos console.log() normalmente no seu código:

exports.helloError = functions.https.onRequest((request, response) => {
  console.log('I am a log entry!');
  response.send('Hello World...');
});
  • Os comandos console.log() têm o nível de registro INFO.
  • Os comandos console.info() têm o nível de registro INFO.
  • Os comandos console.warn() têm o nível de registro ERROR.
  • Os comandos console.error() têm o nível de registro ERROR.
  • As mensagens internas do sistema têm o nível de registro DEBUG.

Como consultar registros

Os registros para o Cloud Functions podem ser visualizados no Console do Google Cloud, na IU do Cloud Logging ou na ferramenta de linha de comando firebase.

Como usar a CLI do Firebase

Para consultar registros com a ferramenta firebase, use o comando functions:log:

firebase functions:log

Para consultar registros de uma função específica, forneça o nome da função como um argumento:

firebase functions:log --only <FUNCTION_NAME>

Para acessar todas as opções de visualização de registros, confira a ajuda sobre functions:log:

firebase help functions:log

Pelo Console do Google Cloud

É possível consultar registros das funções no Console do Google Cloud.

Pela IU do Cloud Logging

É possível consultar os registros do Cloud Functions na IU do Cloud Logging.

Como analisar registros

O Cloud Logging oferece um conjunto de ferramentas eficientes para análise de registros que podem ser usadas para monitorar o Cloud Functions.

Gráficos e alertas

Depois de ter criado métricas baseadas em registros para monitorar suas funções, você pode criar gráficos e alertas com base nessas métricas. Por exemplo, é possível criar um gráfico para visualizar a latência ao longo do tempo ou criar um alerta para saber se um determinado erro ocorre com muita frequência.

Consulte Criar gráficos e alertas para conferir informações detalhadas sobre como usar métricas com base em registros nos gráficos e políticas de alerta.