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.