Günlük kaydı, hata ayıklama ve kod izleme için önemli bir araçtır.
Cloud Functions, aşağıdaki işlemler için logger SDK'sını kullanarak
Düğüm.js
veya Python gibi
veya web için geliştirmede kullanılan console
nesne standardı.
Cloud Logging ücretli bir hizmettir. şu durumlarda faturalandırılabilirsiniz: ücretsiz kullanım kotasını aştı. Daha fazla bilgi için bkz. Cloud Logging fiyatlandırması.
Günlük yazma
Cloud Functions günlük kaydı SDK'sını kullanma
Cloud Functions günlük kaydı SDK'sı, Cloud Logging'e aktarmanızı sağlar. Bu SDK'yı yapılandırılmış veri ile etkinlikleri günlüğe kaydetmek için kullanabilirsiniz. Böylece daha kolay analiz ve izleme yapabilirsiniz.
logger
alt paketinden içe aktarın:
Node.js
// All available logging functions
const {
log,
info,
debug,
warn,
error,
write,
} = require("firebase-functions/logger");
Python
from firebase_functions import logger
logger.log()
komutları INFO günlük düzeyindedir.logger.info()
komutları INFO günlük düzeyindedir.logger.warn()
komutları WARNING günlük düzeyindedir.logger.error()
komutlarının günlük düzeyi ERROR'dur.logger.debug()
komutları DEBUG günlük düzeyindedir.Dahili sistem mesajlarının günlük düzeyi HATA AYIKLAMA şeklindedir.
Bu örnekte, temel bir günlük yazan bir işlev gösterilmektedir:
Node.js
exports.helloWorld = onRequest((request, response) => {
// sends a log to Cloud Logging
log("Hello logs!");
response.send("Hello from Firebase!");
});
Python
@https_fn.on_request()
def hello_world(req: https_fn.Request) -> https_fn.Response:
# sends a log to Cloud Logging
logger.log("Hello logs!")
return https_fn.Response("Hello from Firebase!")
İşlev kodunuzda farklı günlük türleri için farklı günlük düzeyleri kullanın. Yapılandırılmış veriler, son bağımsız değişken olarak bir günlüğe eklenebilir. Burada bir fonksiyonun her günlük türünü nasıl kullanabileceğine ilişkin örnek:
Node.js
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});
});
Python
@https_fn.on_request()
def get_inspirational_quote(req: https_fn.Request) -> https_fn.Response:
firestore_client = firestore.client()
today = datetime.date.today()
quote_of_the_month_ref = (firestore_client.collection("quotes").doc(str(
today.year)).collection("months").doc(str(today.month)))
default_quote = "Python has been an important part of Google since the beginning, and remains so as the system grows and evolves."
quote = None
try:
quote_of_the_month = quote_of_the_month_ref.get()
# Attach relevant debugging information with debug()
logger.debug(
"Monthly quote fetch result",
docRef=quote_of_the_month.path,
exists=quote_of_the_month.exists,
createTime=quote_of_the_month.createTime,
)
if quote_of_the_month.exists:
quote = quote_of_the_month.to_dict()["text"]
else:
# Use warn() for lower-severity issues than error()
logger.warn(
"Quote not found for month, sending default instead",
doc_reference=quote_of_the_month.path,
date_requested=today.strftime("%Y-%m-%d"),
)
quote = default_quote
except:
e = sys.exc_info()[0]
# Attach an error object as the second argument
logger.error("Unable to read quote from Firestore, sending default instead", error=e)
quote = default_quote
# Attach relevant structured data to any log
logger.info("Sending a quote!", quote=quote)
return https_fn.Response("Hello from Firebase!")
logger.write()
kullanarak,
önem düzeylerini günlüğe kaydetme
CRITICAL
, ALERT
ve EMERGENCY
. LogSeverity başlıklı makaleyi inceleyin.
Node.js
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,
});
});
Python
@crashlytics_fn.on_regression_alert_published()
def app_has_regression(alert: crashlytics_fn.CrashlyticsRegressionAlertEvent) -> None:
logger.write(
severity="EMERGENCY",
message="Regression in production app",
issue=alert.data.payload.issue,
last_occurred=alert.data.payload.resolve_time,
)
print(alert)
console.log
uygulamasını kullanma
Bir işlevden günlük kaydı için önerilen çözüm, logger SDK'sını kullanmaktır.
tercih edebilirsiniz. Node.js ile bunun yerine standart JavaScript günlük kaydını kullanabilirsiniz
console.log
ve console.error
gibi aramalar yapabilirsiniz, ancak önce bir
özel modülün düzgün çalışması için standart yöntemlere yama uygulayın:
require("firebase-functions/logger/compat");
Günlük kaydedici uyumluluk modülüne ihtiyaç duyduğunuzda,
Kodunuzda normal şekilde console.log()
yöntem:
exports.helloError = functions.https.onRequest((request, response) => {
console.log('I am a log entry!');
response.send('Hello World...');
});
console.log()
komutları INFO günlük düzeyindedir.console.info()
komutları INFO günlük düzeyindedir.console.warn()
komutlarının günlük düzeyi ERROR'dur.console.error()
komutlarının günlük düzeyi ERROR'dur.- Dahili sistem mesajlarının günlük düzeyi HATA AYIKLAMA şeklindedir.
Günlükleri görüntüleme
Cloud Functions günlükleri
Google Cloud konsolunuza
Cloud Logging kullanıcı arayüzü veya firebase
komut satırı aracı üzerinden kullanılabilir.
Firebase CLI'yı kullanma
firebase
aracıyla günlükleri görüntülemek için functions:log
komutunu kullanın:
firebase functions:log
Belirli bir işlevin günlüklerini görüntülemek için işlev adını bağımsız değişken olarak sağlayın:
firebase functions:log --only <FUNCTION_NAME>
Tüm günlük görüntüleme seçenekleri için functions:log
yardımına bakın:
firebase help functions:log
Google Cloud Console'u kullanma
İşlevlerle ilgili günlükleri Google Cloud Console'da görüntüleyebilirsiniz.
Cloud Logging kullanıcı arayüzünü kullanma
Cloud Functions günlüklerini görüntüleyebilirsiniz Cloud Logging kullanıcı arayüzünde görebilirsiniz.
Günlükleri analiz etme
Cloud Logging, günlük performansınızda kullanabileceğiniz Cloud Functions'larınızı izlemek için kullanabileceğiniz çeşitli araçlar bulunur.
Grafikler ve uyarılar
İşlevlerinizi izlemek için günlük tabanlı metrikler oluşturduktan sonra grafikler ve uyarılar oluşturabilirsiniz. Örneğin, ekip üyeleri için Zaman içindeki gecikmeyi görselleştirmek için bir grafik oluşturabilir veya zaman içindeki gecikmeyi bir hata oluşur.
Nasıl yapılacağıyla ilgili ayrıntılı bilgi için Grafik ve Uyarı Oluşturma bölümüne bakın ve uyarı politikalarında günlük tabanlı metrikler kullanın.