Écrire, afficher des journaux et y répondre

Écrire des journaux

Par défaut, Cloud Functions inclut la journalisation simple. Les journaux écrits dans stdout ou stderr s'affichent automatiquement dans Cloud Console. Pour une journalisation plus avancée, utilisez la bibliothèque cliente Stackdriver Logging.

Node.js

exports.helloWorld = (req, res) => {
  console.log('I am a log entry!');
  console.error('I am an error!');
  res.end();
};
  • Les journaux émis avec console.log() ont le niveau de journalisation INFO.
  • Les journaux émis avec console.error() ont le niveau de journalisation ERROR.
  • Les journaux écrits directement dans stdout ou stderr n'ont pas de niveau de journalisation associé.
  • Les messages système internes ont le niveau de journalisation 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!')
  • Les journaux de sortie standard ou d'erreur standard n'ont pas de niveau de journalisation associé.
  • Les messages système internes ont le niveau de journalisation 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")
}
  • Les journaux de stdout ou stderr n'ont pas de niveau de journalisation associé.
  • Les messages système internes ont le niveau de journalisation DEBUG.

Afficher les journaux

Utiliser l'outil de ligne de commande

Les journaux des fonctions Cloud Functions sont visibles dans l'UI de Stackdriver Logging et via l'outil de ligne de commande gcloud.

Pour afficher les journaux à l'aide de l'outil gcloud, utilisez la commande logs read :

gcloud functions logs read

Pour afficher les journaux d'une fonction spécifique, indiquez le nom de la fonction en tant qu'argument :

gcloud functions logs read FUNCTION_NAME

Vous pouvez même afficher les journaux relatifs à une exécution spécifique :

gcloud functions logs read FUNCTION_NAME --execution-id EXECUTION_ID

Pour consulter la liste complète des options d'affichage des journaux, consultez l'aide sur logs read :

gcloud functions logs read -h

Utiliser le tableau de bord Logging

Vous pouvez également consulter les journaux des fonctions Cloud Functions depuis Cloud Console.

Utilisation de l'API Logging

Les journaux peuvent également être écrits et récupérés via l'API Logging. Les bibliothèques clientes de Stackdriver Logging fournissent une interface idiomatique à l'API Logging :

Node.js

Pour plus d'informations, consultez la documentation de référence sur la bibliothèque cliente 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

Pour en savoir plus, consultez la documentation de référence sur la bibliothèque cliente 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

Pour en savoir plus, consultez la documentation de référence sur la bibliothèque cliente Go.

// Package log contains logging examples.
package log

import (
	"context"
	"fmt"
	"io"

	logging "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
}

Répondre aux journaux

Vous pouvez répondre aux événements consignés par Stackdriver en transférant leurs journaux vers une fonction Cloud. Pour en savoir plus, consultez la page Déclencheurs secondaires avec Stackdriver.