로깅은 코드 디버깅 및 모니터링을 하는 데 중요한 수단입니다.
Cloud Functions에서는 로거 SDK 또는 웹 개발용 console
객체 표준을 사용할 수 있는 옵션을 제공합니다.
Cloud Logging은 청구 가능한 서비스로서 무료 할당량을 초과하면 요금이 청구될 수 있습니다. 자세한 내용은 Cloud Logging 가격 책정을 참조하세요.
로그 작성
Cloud Functions 로거 SDK 사용
Cloud Functions 로거 SDK는 함수에서 Cloud Logging으로 상태를 보고하는 표준 인터페이스를 제공합니다. 이 SDK를 사용해 구조화된 데이터로 이벤트를 로깅하면 보다 쉽게 분석 및 모니터링할 수 있습니다.
logger
하위 패키지에서 가져옵니다.
// All available logging functions
const {
log,
info,
debug,
warn,
error,
write,
} = require("firebase-functions/logger");
logger.log()
명령어의 로그 수준은 정보입니다.logger.info()
명령어의 로그 수준은 정보입니다.logger.warn()
명령어의 로그 수준은 경고입니다.logger.error()
명령어의 로그 수준은 오류입니다.logger.debug()
명령어의 로그 수준은 디버그입니다.- 내부 시스템 메시지의 로그 수준은 디버그입니다.
이 예시에서는 기본 로그를 작성하는 함수를 보여줍니다.
exports.helloWorld = onRequest((request, response) => {
// sends a log to Cloud Logging
log("Hello logs!");
response.send("Hello from Firebase!");
});
함수 코드의 로그 유형에 따라 다른 로그 수준을 사용합니다. 구조화된 데이터를 마지막 인수로 로그에 연결할 수 있습니다. 다음은 함수가 각 로그 유형을 사용할 수 있는 방법의 예시입니다.
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});
});
logger.write()
를 사용하면 추가적으로 로그 심각도 수준이 CRITICAL
, ALERT
, EMERGENCY
인 로그 항목을 작성할 수 있습니다. 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,
});
});
console.log
사용
함수에서 로깅할 때 권장되는 솔루션은 로거 SDK를 사용하는 것입니다. 대신 console.log
및 console.error
와 같은 표준 자바스크립트 로깅 호출을 사용할 수 있지만 호출을 사용하려면 먼저 올바르게 작동하도록 특수 모듈로 표준 메서드에 패치를 적용해야 합니다.
require("firebase-functions/logger/compat");
로거 호환성 모듈이 필요한 경우 코드에 평소처럼 console.log()
메서드를 사용하면 됩니다.
exports.helloError = functions.https.onRequest((request, response) => {
console.log('I am a log entry!');
response.send('Hello World...');
});
console.log()
명령어의 로그 수준은 정보입니다.console.info()
명령어의 로그 수준은 정보입니다.console.warn()
명령어의 로그 수준은 오류입니다.console.error()
명령어의 로그 수준은 오류입니다.- 내부 시스템 메시지의 로그 수준은 디버그입니다.
로그 보기
Cloud Functions의 로그는 Google Cloud Console, Cloud Logging UI 또는 firebase
명령줄 도구를 통해 볼 수 있습니다.
Firebase CLI 사용
firebase
도구로 로그를 보려면 functions:log
명령어를 사용합니다.
firebase functions:log
특정 함수의 로그를 보려면 인수로 함수 이름을 제공합니다.
firebase functions:log --only <FUNCTION_NAME>
모든 로그 보기 옵션은 functions:log
도움말을 확인하세요.
firebase help functions:log
Google Cloud Console 사용
Google Cloud Console에서 함수의 로그를 확인할 수 있습니다.
Cloud Logging UI 사용
Cloud Logging UI에서 Cloud Functions의 로그를 확인할 수 있습니다.
로그 분석
Cloud Logging은 Cloud Functions를 모니터링할 때 사용할 수 있는 강력한 로그 분석 도구 모음을 제공합니다.
차트 및 알림
로그 기반 측정항목을 만들어 함수를 모니터링한 후에는 이 측정항목을 바탕으로 차트와 알림을 만들 수 있습니다. 예를 들어 시간에 따른 지연 시간을 시각화하는 차트를 만들거나 특정 오류가 과도하게 발생할 경우 알려주는 알림을 만들 수 있습니다.
차트 및 알림 정책에서 로그 기반 측정항목을 사용하는 자세한 방법은 차트 및 알림 만들기를 참조하세요.