L'environnement d'exécution Go de Function Compute prend en charge plusieurs méthodes de journalisation, chacune produisant une sortie avec un ensemble de champs différent. Choisissez la méthode adaptée à vos besoins pour déboguer les invocations de fonction.
Choisir une méthode de journalisation
| Méthode | Sortie incluse | Cas d'usage recommandé |
|---|---|---|
context.GetLogger() |
Niveau de journal, ID de requête, horodatage, nom de fichier, numéro de ligne | Débogage en production : corréler les journaux à une invocation spécifique |
Bibliothèque log (standard) |
Horodatage | Journalisation généraliste |
Bibliothèque fmt / stdout / stderr |
Message brut uniquement | Sortie simple ou formatage personnalisé des journaux |
Écrire des journaux avec context.GetLogger()
Cette méthode ajoute à chaque ligne de journal le niveau de journal, l'ID de requête, l'horodatage, le fichier source et le numéro de ligne. Elle constitue ainsi l'approche la plus efficace pour tracer les problèmes entre plusieurs invocations.
package main
import (
"context"
"github.com/aliyun/fc-runtime-go-sdk/fc"
"github.com/aliyun/fc-runtime-go-sdk/fccontext"
)
func HandleRequest(ctx context.Context) (string, error) {
fctx, _ := fccontext.FromContext(ctx)
fctx.GetLogger().Debug("this is Debug log")
fctx.GetLogger().Debugf("Hi, %s\n", "this is Debugf log")
fctx.GetLogger().Info("this is Info log")
fctx.GetLogger().Infof("Hi, %s\n", "this is Infof log")
fctx.GetLogger().Warn("this is Warn log")
fctx.GetLogger().Warnf("Hi, %s\n", "this is Warnf log")
fctx.GetLogger().Error("this is Error log")
fctx.GetLogger().Errorf("Hi, %s\n", "this is Errorf log")
return "Hello world", nil
}
func main() {
fc.Start(HandleRequest)
}
Chaque ligne de journal respecte le format <timestamp> <requestId> [<LEVEL>] <file>:<line>: <message>. L'environnement d'exécution encadre chaque invocation par les lignes FC Invoke Start et FC Invoke End :
FC Invoke Start RequestId: 1e9a87a5-fe0f-4904-a6f4-1d2728514129
2023-09-06T04:28:41.79Z d32c01bc-4397-4f52-a9ca-e374c28f96c1 [DEBUG] main.go:16: this is Debug log
2023-09-06T04:28:41.79Z d32c01bc-4397-4f52-a9ca-e374c28f96c1 [DEBUG] main.go:17: Hi, this is Debugf log
2023-09-06T04:28:41.79Z d32c01bc-4397-4f52-a9ca-e374c28f96c1 [INFO] main.go:19: this is Info log
2023-09-06T04:28:41.79Z d32c01bc-4397-4f52-a9ca-e374c28f96c1 [INFO] main.go:20: Hi, this is Infof log
2023-09-06T04:28:41.79Z d32c01bc-4397-4f52-a9ca-e374c28f96c1 [WARN] main.go:22: this is Warn log
2023-09-06T04:28:41.79Z d32c01bc-4397-4f52-a9ca-e374c28f96c1 [WARN] main.go:23: Hi, this is Warnf log
2023-09-06T04:28:41.791Z d32c01bc-4397-4f52-a9ca-e374c28f96c1 [ERROR] main.go:25: this is Error log
2023-09-06T04:28:41.791Z d32c01bc-4397-4f52-a9ca-e374c28f96c1 [ERROR] main.go:26: Hi, this is Errorf log
FC Invoke End RequestId: 1e9a87a5-fe0f-4904-a6f4-1d2728514129
Écrire des journaux avec la bibliothèque log
La bibliothèque log standard de Go préfixe chaque ligne d'un horodatage.
package main
import (
"log"
"github.com/aliyun/fc-runtime-go-sdk/fc"
)
func HandleRequest() (string, error) {
log.Println("hello world")
return "hello world", nil
}
func main() {
fc.Start(HandleRequest)
}
Sortie :
FC Invoke Start RequestId: a15f8f85-9ed3-47c9-a61c-75678db61831
2022/02/17 04:29:02.228870 hello world
FC Invoke End RequestId: a15f8f85-9ed3-47c9-a61c-75678db61831
Résumé d'exécution
À la fin de chaque invocation, l'environnement d'exécution Go ajoute un résumé d'exécution comprenant les champs suivants :
Request ID : identifiant unique de la requête d'invocation.
Code Check Value : code de vérification du package de code utilisé pour l'invocation.
Function Execution Time : durée effective d'exécution du handler de la fonction.
Function Billing Time : durée prise en compte pour la facturation de l'invocation.
Function Memory : mémoire allouée à la fonction.
Actual Used Memory : pic de mémoire consommée durant l'invocation.