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 :
Nom du paquet |
Nom du journaliseur de premier niveau |
---|---|
|
|
|
|
|
|
|
|
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"
)
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)
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)
Pour plus de détails sur le module de journalisation de Python, consultez la documentation de journalisation de Python.