Como gravar, ver e responder a registros

Como gravar registros

O Cloud Functions inclui geração de registros simples por padrão. Os registros gravados em stdout ou stderr serão exibidos automaticamente no Console do Cloud. Para ter uma geração de registros mais avançada, use a biblioteca de cliente do Stackdriver Logging.

Node.js

exports.helloWorld = (req, res) => {
  console.log('I am a log entry!');
  console.error('I am an error!');
  res.end();
};
  • Os registros emitidos com console.log() têm o nível INFO.
  • Os registros emitidos com console.error() têm o nível ERROR.
  • Os registros gravados diretamente em stdout ou stderr não têm um nível de registro associado.
  • As mensagens internas do sistema têm o nível DEBUG.

Python

def hello_world(data, context):
    """Background Cloud Function.
    Args:
         data (dict): The dictionary with data specific to the given event.
         context (google.cloud.functions.Context): The event metadata.
    """
    print('Hello, stdout!')
  • Os registros da saída padrão ou do erro padrão não têm um nível de registro associado.
  • As mensagens internas do sistema têm o nível DEBUG.

Go


// Package helloworld provides a set of Cloud Functions samples.
package helloworld

import (
	"fmt"
	"log"
	"net/http"
)

// HelloLogging logs messages.
func HelloLogging(w http.ResponseWriter, r *http.Request) {
	log.Println("This is stderr")
	fmt.Println("This is stdout")
}
  • Os registros de stdout ou stderr não têm um nível de registro associado.
  • As mensagens internas do sistema têm o nível DEBUG.

Como ver registros

Como usar a ferramenta de linha de comando

Os registros do Cloud Functions são visíveis na IU do Stackdriver Logging e por meio da ferramenta de linha de comando gcloud.

Para ver os registros com a ferramenta gcloud, use o comando logs read:

gcloud functions logs read

Para ver os registros de uma função específica, digite o nome da função como argumento:

gcloud functions logs read FUNCTION_NAME

Dá até para ver os registros de uma execução específica:

gcloud functions logs read FUNCTION_NAME --execution-id EXECUTION_ID

Para conferir a gama completa de opções de visualização de registros, consulte a ajuda para logs read:

gcloud functions logs read -h

Como usar o painel do Logging

Também é possível ver os registros do Cloud Functions no Console do Cloud.

Como usar a API Logging

Os registros também podem ser gravados e recuperados por meio da API Logging. As bibliotecas de cliente do Stackdriver Logging oferecem uma interface com a linguagem da API Logging:

Node.js

Para ver mais informações, consulte a referência da biblioteca de cliente do Node.js.
// By default, the client will authenticate using the service account file
// specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable and use
// the project specified by the GCLOUD_PROJECT environment variable. See
// https://github.com/googleapis/google-cloud-node/blob/master/docs/authentication.md
const Logging = require('@google-cloud/logging');

const getLogEntries = async () => {
  // Instantiates a client
  const logging = Logging();

  const options = {
    pageSize: 10,
    filter: 'resource.type="cloud_function"',
  };

  // Retrieve the latest Cloud Function log entries
  // See https://googlecloudplatform.github.io/gcloud-node/#/docs/logging
  const [entries] = await logging.getEntries(options);

  console.log('Entries:');
  entries.forEach(entry => console.log(entry));
  return entries;
};

Python

Para ver mais informações, consulte a referência da biblioteca de cliente do Python.
import google.cloud.logging as cloud_logging
cloud_client = cloud_logging.Client()
log_name = 'cloudfunctions.googleapis.com%2Fcloud-functions'
cloud_logger = cloud_client.logger(log_name)

def get_log_entries(request):
    """
    HTTP Cloud Function that displays log entries from Cloud Functions.
    Args:
        request (flask.Request): The request object.
    Returns:
        The response text, or any set of values that can be turned into a
        Response object using `make_response`
        <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>.
    """
    """"""

    all_entries = cloud_logger.list_entries(page_size=10)
    entries = next(all_entries.pages)

    for entry in entries:
        timestamp = entry.timestamp.isoformat()
        print('* {}: {}'.format
              (timestamp, entry.payload))

    return 'Done!'

Go

Para ver obter mais informações, consulte a referência da biblioteca de clientes do Go.

// Package log contains logging examples.
package log

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/logging/apiv2"
	"google.golang.org/api/iterator"
	loggingpb "google.golang.org/genproto/googleapis/logging/v2"
)

// logEntries retrieves log entries from projectID and writes them to the
// passed io.Writer.
func logEntries(w io.Writer, projectID string) error {
	ctx := context.Background()
	client, err := logging.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("logging.NewClient: %v", err)
	}

	req := &loggingpb.ListLogEntriesRequest{
		ResourceNames: []string{"projects/" + projectID},
		PageSize:      10,
	}

	fmt.Fprintln(w, "Entries:")
	it := client.ListLogEntries(ctx, req)
	// Wrap in a for loop to get all available log entries.
	resp, err := it.Next()
	if err == iterator.Done {
		return nil
	}
	if err != nil {
		return fmt.Errorf("it.Next: %v", err)
	}
	fmt.Fprintln(w, resp.GetPayload())
	return nil
}

Como responder a registros

Responda a eventos registrados pelo Stackdriver enviando os registros para uma função do Cloud. Para ver mais informações, consulte a página Gatilhos secundários com o Stackdriver.