Bibliothèque de points de contrôle Snowpark : journalisation

Les points de contrôle Snowpark utilisent le module de journalisation intégré Python pour fournir des messages de journal sur ses opérations internes. La bibliothèque émet des messages de journal à différents niveaux de journalisation qui peuvent être utilisés pour comprendre le comportement de la bibliothèque et diagnostiquer les problèmes.

Structure de journalisation

Les points de contrôle Snowpark suivent une approche de journalisation au niveau du module, où chaque module Python qui doit enregistrer des messages définit son propre journaliseur et le nom du journaliseur correspond au nom complet du module.

Chaque paquet qui compose les points de contrôle Snowpark définit un journaliseur de premier niveau. Ce journaliseur porte le nom du paquet lui-même et sert de parent à tous les journaliseurs au niveau du module de ce paquet. Le journaliseur de premier niveau est initialisé avec un NullHandler, ce qui garantit que les messages de journal ne génèrent pas de sortie involontaire, sauf si vous configurez explicitement la journalisation. Toute configuration de journalisation appliquée au journaliseur de premier niveau s’applique automatiquement à tous les journaliseurs de module de ce paquet.

Vous trouverez ci-dessous les noms des journaliseurs de premier niveau des points de contrôle Snowpark :

Noms des journaliseurs des points de contrôle Snowpark

Nom du paquet

Nom du journaliseur de premier niveau

snowpark-checkpoints-collectors

snowflake.snowpark_checkpoints_collector

snowpark-checkpoints-validators

snowflake.snowpark_checkpoints

snowpark-checkpoints-configuration

snowflake.snowpark_checkpoints_configuration

snowpark-checkpoints-hypothesis

snowflake.hypothesis_snowpark

Cette approche au niveau du module permet un contrôle fin de la sortie de la journalisation et garantit que les journaux héritent des paramètres d’un journaliseur de niveau supérieur tout en émettant des informations précises sur leur origine.

Configuration de la journalisation

Les points de contrôle Snowpark ne fournissent pas de configuration de journalisation par défaut. Vous devez configurer explicitement la journalisation dans votre application pour voir les messages de journal.

Si votre application dispose déjà d’une configuration de journalisation utilisant le module de journalisation intégré à Python, vous devriez alors être en mesure de voir les messages de journal émis par les points de contrôle Snowpark sans aucune configuration supplémentaire. Si vous ne disposez pas d’une configuration de journalisation, vous pouvez configurer la journalisation à l’aide de la fonction basicConfig ou en créant une configuration personnalisée.

Il est conseillé de configurer la journalisation une fois au point d’entrée de votre application, par exemple dans le script principal ou le module qui initialise votre application. Cela permet de s’assurer que la journalisation est établie avant que les composants de la bibliothèque ne soient utilisés. Si la bibliothèque est utilisée dans un script autonome, la journalisation doit être configurée au début de ce script. Vous trouverez ci-dessous quelques exemples pour vous aider à démarrer :

Configuration de base de la journalisation

La manière la plus simple et la plus rapide d’activer la journalisation est d’utiliser la fonction basicConfig. Cette fonction vous permet de configurer le journaliseur racine, qui est l’ancêtre de tous les journaliseurs dans la hiérarchie du module de journalisation.

L’exemple suivant montre comment configurer le journaliseur racine pour qu’il capture les messages de journal au niveau du journal spécifié et au-delà, et comment les imprimer sur la console :

import logging

logging.basicConfig(
  level=logging.DEBUG, # Adjust the log level as needed
  format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
Copy

Configuration avancée de la journalisation

Pour des configurations de journalisation plus avancées, vous pouvez utiliser le module logging.config pour configurer la journalisation. Cette approche vous permet de définir des journaliseurs, des gestionnaires et des formateurs personnalisés et de les configurer à l’aide d’un dictionnaire.

L’exemple suivant montre comment configurer le journaliseur racine à l’aide d’une configuration personnalisée qui journalise les messages dans la console et dans un fichier :

import logging.config
from datetime import datetime

LOGGING_CONFIG = {
  "version": 1,
  "disable_existing_loggers": False,
  "formatters": {
      "standard": {
          "format": "{asctime} - {name} - {levelname} - {message}",
          "style": "{",
          "datefmt": "%Y-%m-%d %H:%M:%S",
      },
  },
  "handlers": {
      "console": {
          "class": "logging.StreamHandler",
          "formatter": "standard",
          "level": "DEBUG",  # Adjust the log level as needed
      },
      "file": {
          "class": "logging.FileHandler",
          "formatter": "standard",
          "filename": f"app_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log",
          "level": "DEBUG",  # Adjust the log level as needed
          "encoding": "utf-8",
      },
  },
  "root": {
      "handlers": ["console", "file"],
      "level": "DEBUG",  # Adjust the log level as needed
  },
}

logging.config.dictConfig(LOGGING_CONFIG)
Copy

Activer la journalisation pour des paquets spécifiques

Pour configurer la journalisation d’un paquet spécifique de points de contrôle Snowpark sans affecter les autres journaliseurs, vous pouvez utiliser le nom du journaliseur de premier niveau pour ce paquet et appliquer tous les gestionnaires et formateurs personnalisés en fonction de vos besoins. L’application de la configuration au journaliseur de premier niveau garantit que tous les journaliseurs au niveau du module héritent de cette configuration.

L’exemple suivant montre comment configurer la journalisation uniquement pour les paquets suivants :

  • snowpark-checkpoints-collectors

  • snowpark-checkpoints-configuration

  • snowpark-checkpoints-validators

  • snowpark-checkpoints-hypothesis

import logging.config
from datetime import datetime

LOGGING_CONFIG = {
  "version": 1,
  "disable_existing_loggers": False,
  "formatters": {
      "standard": {
          "format": "{asctime} - {name} - {levelname} - {message}",
          "style": "{",
          "datefmt": "%Y-%m-%d %H:%M:%S",
      },
  },
  "handlers": {
      "console": {
          "class": "logging.StreamHandler",
          "formatter": "standard",
          "level": "DEBUG",  # Adjust the log level as needed
      },
      "file": {
          "class": "logging.FileHandler",
          "formatter": "standard",
          "filename": f"app_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log",
          "level": "DEBUG",  # Adjust the log level as needed
          "encoding": "utf-8",
      },
  },
  "loggers": {
      "snowflake.snowpark_checkpoints_collector": {
          "handlers": ["console", "file"],
          "level": "DEBUG",  # Adjust the log level as needed
          "propagate": False,
      },
      "snowflake.snowpark_checkpoints": {
          "handlers": ["console", "file"],
          "level": "DEBUG",  # Adjust the log level as needed
          "propagate": False,
      },
      "snowflake.snowpark_checkpoints_configuration": {
          "handlers": ["console", "file"],
          "level": "DEBUG",  # Adjust the log level as needed
          "propagate": False,
      },
      "snowflake.hypothesis_snowpark": {
          "handlers": ["console", "file"],
          "level": "DEBUG",  # Adjust the log level as needed
          "propagate": False,
      },
  },
}

logging.config.dictConfig(LOGGING_CONFIG)
Copy

Pour plus de détails sur le module de journalisation de Python, consultez la documentation de journalisation de Python.