Construcción del marco de automatización de Python: recopilación de registros

1. Concepto de registro

        El registro se utiliza para registrar la información cuando el sistema está funcionando, y el registro de un evento también se denomina Registro.

2. Función de registro

  • depurador
  • Comprender la situación de ejecución del programa del sistema, si es normal
  • Análisis de fallas en la operación del programa del sistema y ubicación del problema
  • Se utiliza para el análisis del comportamiento del usuario y las estadísticas de datos.

3. Nivel de registro

Nivel de registro: se refiere a la prioridad, importancia o gravedad de la información de registro

Niveles de registro comunes describir
DEPURAR Nivel de depuración, imprime información de registro muy detallada, generalmente utilizada para la depuración de código

INFORMACIÓN

Nivel de información, imprime información de registro general, resalta el proceso en ejecución del programa
ADVERTENCIA Nivel de advertencia, información de registro de advertencia de impresión, que indica que habrá errores potenciales, generalmente no afecta el uso normal del software
ERROR Nivel de error, información de excepción de error de impresión, los errores de este nivel pueden causar que algunas funciones del sistema no se puedan usar normalmente
CRÍTICO Nivel de error grave, un error grave, que indica que es posible que el sistema no siga funcionando

ilustrar:

        El nivel de registro en la lista anterior aumenta de arriba a abajo, a saber: DEPURACIÓN < INFO < ADVERTENCIA < ERROR < CRÍTICO;        

        Cuando se especifica un nivel de registro para el programa, el programa registrará toda la información de registro cuyo nivel de registro sea mayor o igual que el nivel de registro especificado, en lugar de registrar solo la información de registro del nivel especificado;        

        En general, se recomienda usar solo los cuatro niveles de DEPURACIÓN, INFO, ADVERTENCIA y ERROR.

4. Uso básico de registros

import logging    # 导入日志依赖包

logging.debug("这是一条调试信息") 
logging.info("这是一条普通信息") 
logging.warning("这是一条警告信息") 
logging.error("这是一条错误信息") 
logging.critical("这是一条严重错误信息")

(1) Establecer el nivel de registro

logging.basicConfig(level=logging.DEBUG)

level可选:
    logging.DEBUG
    logging.INFO
    logging.WARNING
    logging.ERROR
    logging.CRITICAL

Nota: El nivel de registro predeterminado en el registro es ADVERTENCIA. Solo se pueden generar registros mayores o iguales a este nivel en el programa, y ​​los registros menores a este nivel no se imprimirán.

(2) Establecer el formato de registro

El formato de registro predeterminado es: nivel de registro: Nombre del registrador: contenido del registro

Formato de registro personalizado:

logging.basicConfig(format="格式化信息")

常用的格式化信息
format = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'

Información de formato que puede ser utilizada por el parámetro de formato:

Marcador de posición describir

%(nombre)s

nombre del registrador
%(nº de nivel)s nivel de registro en forma numérica
%(nombre de nivel)s nivel de registro como texto
%(nombre de ruta)s El nombre de ruta completo del módulo que llamó a la función de salida de registro, posiblemente sin
%(nombre de archivo)s El nombre de archivo del módulo que llamó a la función de salida de registro
%(módulo)s El nombre del módulo que llama a la función de salida de registro.
%(nombre de función)s El nombre de la función que llama a la función de salida de registro.
% (lino) d La línea de código donde se encuentra la declaración que llama a la función de salida de registro.
%(creado)f La hora actual, representada por un número de coma flotante estándar de UNIX que representa la hora
%(relativocreado)d Al generar información de registro, la cantidad de milisegundos desde que se creó el registrador
%(tiempo asc)s La hora actual como una cadena. El formato predeterminado es "2003-07-08 16:49:45,896"
%(subproceso)d identificador de hilo Tal vez no
%(nombre del subproceso)s nombre del hilo Tal vez no
%(proceso)d identificacion de proceso. Tal vez no
%(mensaje)s mensaje de salida del usuario

(3) Información de registro de salida a un archivo

De forma predeterminada, el módulo de registro de Python imprime registros en la salida estándar (consola).

Salida de información de registro a un archivo:

logging.basicConfig(filename="输出的文件名.log")

Uso avanzado de registros

1. Cuatro componentes principales del módulo de registro

Nombre del componente nombre de la clase Descripcion funcional
registrador Registrador Proporciona la entrada del registro de uso del programa
procesador Manipulador Enviar registros de registro creados por el registrador a la salida de destino adecuada
formateador formateador Determina el formato de salida final del registro.
filtrar Filtrar Proporciona herramientas de control más detalladas para decidir qué registros generar y qué registros descartar.

2. La relación entre componentes

Registrador: proporciona una entrada para registrar registros, como: log.info("")
Procesador: es el procesador que realmente envía el contenido del registrador a la consola o a un archivo o red; cada registrador se puede agregar Múltiples procesadores
Formateador: el procesador puede configurar diferentes formatos, necesita usar el formateador
Filtro: el procesador necesita filtrar la información de registro, necesita configurar el filtro

3. Clase de registrador

Las tareas del objeto de la clase Logger:

  • Exponer métodos de registro a programas
  • Según el nivel de registro o el objeto de filtro para decidir qué registros hacer un seguimiento
  • Entregar mensajes de registro a todos los controladores de registro interesados

Cómo crear un objeto de clase Logger:

logger = logging.getLogger() 

或者

logger = logging.getLogger(name)

El método logging.getLogger() tiene un nombre de parámetro opcional, que indica el nombre del registrador que se devolverá. Si no se proporciona este parámetro, se devolverá el objeto registrador raíz. Si se llama al método getLogger() varias veces con el mismo valor de parámetro de nombre, se devolverá una referencia al mismo objeto registrador.

Métodos comúnmente utilizados de Logger:

método describir

registrador.depurar()

registrador.info()

registrador.advertencia()

registrador.error()

registrador.crítico()

registro de impresión
registrador.setLevel() Establece el nivel de gravedad mínimo de los mensajes de registro que procesará el registrador
registrador.addHandler() Agregue un objeto controlador al objeto registrador
registrador.addFilter() Agregar un objeto de filtro al objeto registrador

4. Clase de controlador

Función: La función del objeto Handler es distribuir el mensaje a la ubicación especificada por el controlador, como: consola, archivo, red, correo, etc. El objeto Logger puede agregar múltiples objetos de controlador por sí mismo a través del método addHandler().

Cómo crear un objeto de clase Handler:

Manipulador describir
registro.StreamHandler Envíe mensajes de registro a la salida de Stream, como std.out, std.err o cualquier objeto similar a un archivo
logging.FileHandler Envíe mensajes de registro a un archivo de disco, que crece infinitamente en tamaño de forma predeterminada
logging.handlers.RotatingFileHandler Envíe mensajes de registro a archivos de disco y admita que los archivos de registro se corten por tamaño
logging.hanlders.TimedRotatingFileHandler Envíe mensajes de registro a archivos de disco y admita que los archivos de registro se corten por tiempo
logging.handlers.HTTPHandler Enviar mensajes de registro a un servidor HTTP como GET o POST
logging.handlers.SMTPHandler Enviar mensajes de registro a una dirección de correo electrónico específica

Métodos comúnmente utilizados de Handler:

método describir
controlador.setLevel() 设置handler将会处理的日志消息的最低严重级别
handler.setFormatter() 为handler设置一个格式器对象
handler.addFilter() 为handler添加一个过滤器对象

5、Formatter类

作用:Formatter对象用于配置日志信息的格式。

如何创建Formatter类对象:

formatter = logging.Formatter(fmt=None, datefmt=None, style='%') 
    fmt:指定消息格式化字符串,如果不指定该参数则默认使用message的原始值 
    datefmt:指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S" 
    style:Python 3.2新增的参数,可取值为 '%', '{'和 '$',如果不指定该参数则默认使用'%'

6、日志高级用法综合案例分析

目标:将日志信息同时输出到控制台和文件中

import logging.handlers    # 导入此包才能使用handler类创建对象

# 获取logger
logger = logging.getLogger()

# 设置级别
logger.setLevel(logging.INFO)

# 获取控制台 处理器
sh = logging.StreamHandler()
# 根据时间切割文件 处理器
th = logging.handlers.TimedRotatingFileHandler(filename="文件名.log",
                                                when="S",
                                                interval=1,
                                                backupCount=3,
                                                encoding="utf-8")

# 添加格式器
fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
fm = logging.Formatter(fmt)

# 将格式器 添加到处理器中
sh.setFormatter(fm)
th.setFormatter(fm)


# 将 控制台处理器添加到 logger
logger.addHandler(sh)
logger.addHandler(th)

# 打印信息
logger.info("info")
logger.debug("debug")
logger.error("error")
logger.warning("warning")

logging.handlers.TimedRotatingFileHandler()参数说明:

filename:文件名
when:间间隔的类型

      可选S(秒)、M(分钟)、H(小时)、D(天)、midnight(一夜)、W{0-6}(周几)
interval: 时间间隔
backupCount:能留几个日志文件,超过数量就会丢弃掉老的日志文件

Supongo que te gusta

Origin blog.csdn.net/ouihsiad/article/details/127132546
Recomendado
Clasificación