Biblioteca Snowpark Checkpoints: registro em log

O Snowpark Checkpoints usa o módulo registro em log incorporado ao Python para fornecer mensagens de registro sobre suas operações internas. A biblioteca emite mensagens de registro em diferentes níveis de registro que podem ser usados para entender o comportamento da biblioteca e diagnosticar problemas.

Estrutura de registro em log

O Snowpark Checkpoints segue uma abordagem de registro em nível de módulo, em que cada módulo Python que precisa registrar mensagens define seu próprio registrador, e o nome do registrador corresponde ao nome totalmente qualificado do módulo.

Cada pacote que compõe o Snowpark Checkpoints define um registrador de nível superior. Esse registrador recebe o nome do próprio pacote e atua como objeto pai de todos os registradores em nível de módulo dentro desse pacote. O registrador de nível superior é inicializado com um NullHandler, garantindo que as mensagens de registro não produzam uma saída não intencional, a menos que o usuário configure explicitamente o registro. Qualquer configuração de registro aplicada ao registrador de nível superior se aplica automaticamente a todos os registradores de módulo dentro desse pacote.

A seguir, os nomes dos registradores de nível superior do Snowpark Checkpoints:

Nomes dos registradores do Snowpark Checkpoints

Nome do pacote

Nome do registrador de nível superior

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

Essa abordagem em nível de módulo permite um controle refinado sobre a saída de logs e garante que os logs herdem as configurações de um logger de nível superior e, ao mesmo tempo, emitam informações precisas sobre sua origem.

Configuração de registro em log

O Snowpark Checkpoints não fornece uma configuração de registro padrão. Você deve configurar explicitamente o registro em seu aplicativo para ver as mensagens de registro.

Se o seu aplicativo já tiver uma configuração de registro usando o módulo de registro interno do Python, você poderá ver as mensagens de registro emitidas pelo Snowpark Checkpoints sem nenhuma configuração adicional. Se não tiver uma configuração de registro, você pode definir o registro usando a função basicConfig ou criando uma configuração personalizada.

É recomendável configurar o registro uma vez no ponto de entrada do aplicativo, como no script principal ou no módulo que inicializa o aplicativo. Isso garante que o registro seja configurado antes que qualquer componente da biblioteca seja usado. Se a biblioteca for usada em um script autônomo, o registro deve ser configurado no início desse script. Abaixo estão alguns exemplos para ajudar você a começar:

Configuração básica de registro em log

A maneira mais simples e rápida de ativar o registro é usar a função basicConfig. Essa função permite que você configure o registrador raiz, que é o ancestral de todos os registradores na hierarquia do módulo de registros.

O exemplo a seguir demonstra como configurar o registrador raiz para capturar mensagens de registro no nível do registro especificado e acima, imprimindo-as no console:

import logging

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

Configuração avançada de registro em log

Para configurações de registro mais avançadas, você pode usar o módulo logging.config para configurar o registro. Essa abordagem permite que você defina registradores, manipuladores e formatadores personalizados e os configure usando um dicionário.

O exemplo a seguir demonstra como configurar o registrador raiz usando uma configuração personalizada que registra mensagens no console e em um arquivo:

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

Ativar o registro em log para pacotes específicos

Para configurar o registro para um pacote específico do Snowpark Checkpoints sem afetar outros registradores, você pode usar o nome do registrador de nível superior desse pacote e aplicar quaisquer manipuladores e formatadores personalizados de acordo com suas necessidades. A aplicação da configuração ao registrador de nível superior garante que todos os registradores de nível de módulo herdem essa configuração.

O exemplo a seguir demonstra como configurar o registro em log apenas para os seguintes pacotes:

  • 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

Para obter mais detalhes sobre o módulo de registro do Python, consulte a documentação de registro em log do Python.