Snowpark Checkpoints-Bibliothek: Protokollierung¶
Snowpark Checkpoints verwendet das in Python eingebaute Modul Protokollierung, um Protokollmeldungen über seine internen Operationen bereitzustellen. Die Bibliothek gibt Protokollmeldungen auf verschiedenen Protokolliergraden aus, die dazu verwendet werden können, die Verhaltensweise der Bibliothek zu verstehen und Probleme zu diagnostizieren.
Struktur der Protokollierung¶
Snowpark Checkpoints folgt einem Protokollierungsansatz auf Modulebene, bei dem jedes Python-Modul, das Meldungen protokollieren muss, einen eigenen Logger definiert und der Name des Loggers mit dem vollqualifizierten Namen des Moduls übereinstimmt.
Jedes Snowpark Checkpoints-Paket definiert einen Top-Level-Logger, der nach dem Paket selbst benannt ist und als übergeordnetes Element für alle Logger auf Modulebene innerhalb dieses Pakets fungiert. Der Top-Level-Logger wird mit einem NullHandler initialisiert. Dadurch wird sichergestellt, dass der Logger keine Ausgabe erzeugt, für die er nicht explizit konfiguriert wurde. Jede Protokollierungskonfiguration, die auf den Top-Level-Logger angewendet wird, gilt automatisch für alle Modul-Logger innerhalb dieses Pakets.
Top-Level-Logger-Namen von Snowpark Checkpoints:
Name des Pakets |
Name des Top-Level-Loggers |
---|---|
|
|
|
|
|
|
|
|
Dieser Ansatz auf Modulebene ermöglicht eine feinkörnige Kontrolle über die Protokollierungsausgabe und stellt sicher, dass die Protokolle die Einstellungen eines übergeordneten Loggers übernehmen und gleichzeitig genaue Informationen über ihre Herkunft ausgeben.
Protokollierungskonfiguration¶
Snowpark Checkpoints bietet keine Standard-Protokollierungskonfiguration. Sie müssen die Protokollierung in Ihrer Anwendung explizit konfigurieren, um die Protokollmeldungen zu sehen.
Wenn Ihre Anwendung bereits über eine Protokollierungskonfiguration verfügt, die das in Python integrierte Protokollierungsmodul verwendet, sollten Sie die von Snowpark Checkpoints ausgegebenen Protokollmeldungen ohne zusätzliche Konfiguration sehen können. Wenn Sie nicht über eine Protokollierungskonfiguration verfügen, können Sie die Protokollierung mit der Funktion basicConfig einrichten oder eine eigene Konfiguration erstellen.
Es ist ratsam, die Protokollierung einmal am Einstiegspunkt Ihrer Anwendung zu konfigurieren, z. B. im Hauptskript oder dem Modul, das Ihre Anwendung initialisiert. Dadurch wird sichergestellt, dass die Protokollierung eingerichtet wird, bevor irgendwelche Bibliothekskomponenten verwendet werden. Wenn die Bibliothek in einem eigenständigen Skript verwendet wird, sollte die Protokollierung am Anfang des Skripts eingerichtet werden. Nachfolgend finden Sie einige Beispiele, die Ihnen den Einstieg erleichtern:
Grundlegende Protokollierungskonfiguration¶
Der einfachste und schnellste Weg, die Protokollierung zu aktivieren, ist die Funktion basicConfig. Mit dieser Funktion können Sie den Root-Logger konfigurieren, der der Vorfahre aller Logger in der Hierarchie der Logging-Module ist.
Das folgende Beispiel zeigt, wie Sie den Root-Logger so einrichten, dass er Protokollmeldungen ab dem angegebenen Protokolliergrad erfasst und auf der Konsole ausgibt:
import logging
logging.basicConfig(
level=logging.DEBUG, # Adjust the log level as needed
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
Erweiterte Protokollierungskonfiguration¶
Für fortgeschrittene Protokollierungskonfigurationen können Sie das Modul logging.config verwenden, um die Protokollierung einzurichten. Dieser Ansatz ermöglicht es Ihnen, benutzerdefinierte Logger, Handler und Formatierer zu definieren und sie mithilfe eines Wörterbuchs zu konfigurieren.
Das folgende Beispiel zeigt, wie Sie den Root-Logger mit einer benutzerdefinierten Konfiguration einrichten, die Meldungen auf der Konsole und in einer Datei protokolliert:
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)
Aktivieren Sie die Protokollierung für bestimmte Pakete¶
Um die Protokollierung für ein bestimmtes Paket von Snowpark Checkpoints zu konfigurieren, ohne andere Logger zu beeinträchtigen, können Sie den Namen des Top-Level-Loggers für dieses Paket verwenden und alle benutzerdefinierten Handler und Formatierer entsprechend Ihren Anforderungen anwenden. Durch die Anwendung der Konfiguration auf den Top-Level-Logger wird sichergestellt, dass alle Logger der Modulebene diese Konfiguration erben.
Das folgende Beispiel zeigt, wie Sie die Protokollierung nur für die folgenden Pakete konfigurieren:
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)
Weitere Einzelheiten über das Python-Protokollierungsmodul finden Sie in der Python-Protokollierungsdokumentation.