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 verfolgt einen Protokolliergrad auf Modulebene, bei dem jedes Python-Modul, das Nachrichten protokollieren muss, seinen eigenen Logger definiert und der Name des Loggers dem vollständig qualifizierten Namen des Moduls entspricht.

Jedes Paket, aus dem Snowpark Checkpoints besteht, definiert einen Top-Level-Logger. Dieser Logger ist nach dem Paket selbst benannt und dient als übergeordneter Logger für alle Logger auf Modulebene innerhalb dieses Pakets. Der Top-Level-Logger wird mit einem NullHandler initialisiert. Damit wird sichergestellt, dass Protokollmeldungen keine unbeabsichtigten Ausgaben erzeugen, es sei denn, Sie konfigurieren die Protokollierung explizit. Jede Protokollierungskonfiguration, die auf den Top-Level-Logger angewendet wird, gilt automatisch für alle Modul-Logger innerhalb dieses Pakets.

Nachfolgend finden Sie die Namen von Top-Level-Loggern von Snowpark Checkpoints:

Namen von Snowpark Checkpoints-Loggern

Name des Pakets

Name des Top-Level-Loggers

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

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"
)
Copy

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)
Copy

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)
Copy

Weitere Einzelheiten über das Python-Protokollierungsmodul finden Sie in der Python-Protokollierungsdokumentation.