python | Métodos de uso comuns da biblioteca padrão Logging (decorador de log esfregado à mão)


01 Uso básico

Os níveis de log de baixo para alto são: DEBUG< INFO< WARNING< ERROR< CRITICAL
O nível de log precisa ser definido antes do uso. Somente logs iguais a este nível de log serão registrados.
Por exemplo, se o nível de log estiver definido como WARNING, somente os logs de três níveis WARNING: , ERRORe CRITICALserão registrados.

import logging

# 使用前需要先设置日志级别 这里设置的是DEBUG
logging.basicConfig(level=logging.DEBUG)
logging.debug("这是一个debug消息")
logging.info("这是一个info消息")
logging.warning("这是一个warning消息")
logging.error("这是一个error消息")
logging.critical("这是一个critical消息")

Ao executar este código, você pode ver a seguinte saída no console:

DEBUG:root:这是一个debug消息
INFO:root:这是一个info消息
WARNING:root:这是一个warning消息
ERROR:root:这是一个error消息
CRITICAL:root:这是一个critical消息

02 Formatação de registros

Você pode personalizar o formato de saída do log, consulte:

logging.basicConfig(
    level=logging.DEBUG,
    format="%(asctime)s [%(levelname)s]: %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S"
)

03 Saída para arquivo

Por padrão, os logs são enviados para o console. Se quiser enviar o log para um arquivo, você pode configurá-lo assim:

logging.basicConfig(
    filename='app.log',
    level=logging.DEBUG,
    format="%(asctime)s [%(levelname)s]: %(message)s"
)

04 Esfregue à mão um decorador de toras

Escreva à mão um decorador e pendure-o na função para realizar a entrada e saída da função de impressão.
Aqui está o código de referência:

import logging
from functools import wraps

# 定义日志级别和格式化
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)


def return_log(func):
    """用于输出打印函数的返回值"""
    @wraps(func)
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        logging.info(f"func <{
      
      func.__name__}> return: {
      
      result}")
        return result
    return wrapper


def args_log(func):
    """用于输出打印函数的传入参数"""
    @wraps(func)
    def wrapper(*args, **kwargs):
        logging.info(f"func <{
      
      func.__name__}> args: {
      
      args}, kwargs: {
      
      kwargs}")
        return func(*args, **kwargs)
    return wrapper

Acho que você gosta

Origin blog.csdn.net/xuzhongyi103/article/details/132518107
Recomendado
Clasificación