O runtime Go no Function Compute oferece suporte a vários métodos de log, cada um com uma saída composta por campos diferentes. Escolha o método mais adequado às suas necessidades ao depurar invocações de função.
Escolha um método de log
|
Método |
Saída inclui |
Mais indicado para |
|
|
Nível de log, ID da solicitação, carimbo de data/hora, nome do arquivo e número da linha |
Depuração em produção: correlacionar logs a uma invocação específica |
|
Biblioteca |
Carimbo de data/hora |
Logs de uso geral |
|
Biblioteca |
Apenas mensagem bruta |
Saída simples ou formatação personalizada de logs |
Escreva logs com context.GetLogger()
Esse método adiciona nível de log, ID da solicitação, carimbo de data/hora, arquivo de source e número da linha a cada registro, tornando-o a opção mais eficaz para rastrear problemas entre invocações.
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)
}
Cada linha de log segue o formato <timestamp> <requestId> [<LEVEL>] <file>:<line>: <message>. O runtime delimita cada invocação com as linhas FC Invoke Start e 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
Escreva logs com a biblioteca log
A biblioteca padrão log do Go insere um carimbo de data/hora no início de cada linha.
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)
}
Saída:
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
Resumo da execução
Ao final de cada invocação, o runtime Go anexa um resumo da execução. Esse resumo contém os seguintes campos:
Request ID: ID exclusivo da solicitação de invocação.
Code Check Value: código de verificação do pacote de código usado na invocação.
Function Execution Time: tempo real que o handler da função levou para executar.
Function Billing Time: duração considerada para calcular o faturamento da invocação.
Function Memory: memória alocada para a função.
Actual Used Memory: pico de memória consumido durante a invocação.