registro y el uso de sys.stdout

Solo se puede mostrar en la consola / solo se puede mostrar en el archivo

# -*- coding: utf-8 -*-
import logging

logging.basicConfig(format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
                    level=logging.DEBUG,
                    filename='test.log',
                    filemode='a')

logging.debug('debug级别,一般用来打印一些调试信息,级别最低')
logging.info('info级别,一般用来打印一些正常的操作信息')
logging.warning('waring级别,一般用来打印警告信息')
logging.error('error级别,一般用来打印一些错误信息')
logging.critical('critical级别,一般用来打印一些致命的错误信息,等级最高')

Pero después de realizar tal operación, encontraremos que la consola no da salida.¿Cómo enviar la salida a la consola y escribir en el archivo?

diseño modular de registro

De hecho, la biblioteca de registro adopta un diseño modular y proporciona muchos componentes: registradores, procesadores, filtros y formateadores.

 Logger es responsable de registrar los mensajes de registro, y luego debemos poner estos mensajes de registro en Handler para su procesamiento, y Filter nos ayuda a filtrar la información (no se limita a filtrar por nivel), Formatter es el mismo que el formato anterior, que se usa para establecer Log contenido y formato.

Manejador comúnmente usado de cuatro maneras:

logging.StreamHandler:  salida de la consola
logging.FileHandler: salida del archivo
logging.handlers.RotatingFileHandler:

Divida automáticamente el archivo de registro según el tamaño y vuelva a generar el archivo una vez que alcance el tamaño especificado
logging.handlers.TimedRotatingFileHandler: divida automáticamente el archivo de registro según el tiempo

# -*- coding: utf-8 -*-
import logging
from logging import handlers

logger = logging.getLogger('test')
logger.setLevel(level=logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')

# 按照大小自动分割日志文件,一旦达到指定的大小重新生成文件 D表示以天为周期切分文件,S秒
time_rotating_file_handler = handlers.TimedRotatingFileHandler(filename='rotating_test.log', when='D')
time_rotating_file_handler.setLevel(logging.DEBUG)
time_rotating_file_handler.setFormatter(formatter)
logger.addHandler(time_rotating_file_handler)


# 文件输出
file_handler = logging.FileHandler('test2.log')
file_handler.setLevel(level=logging.INFO)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

# 控制台输出  handler 负责将日志输出到哪里,setLevel告诉它要输出哪些级别的日志
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)

logger.debug('debug级别,一般用来打印一些调试信息,级别最低')
logger.info('info级别,一般用来打印一些正常的操作信息')
logger.warning('waring级别,一般用来打印警告信息')
logger.error('error级别,一般用来打印一些错误信息')
logger.critical('critical级别,一般用来打印一些致命的错误信息,等级最高')

La ventaja de esto es que cuando tenemos varios destinos de registro, como guardar en un archivo y enviar a la consola, podemos establecer diferentes niveles para ellos respectivamente; el nivel del registrador se filtra primero, por lo que los registros filtrados por el registrador El controlador tampoco puede iniciar sesión, por lo que solo puede cambiar el nivel de registrador y afectar toda la salida. La combinación de los dos facilita la gestión del nivel de registro.

sys.stdout () y sys.stdout.flush ()

sys.stdout() Un objeto de archivo incorporado, similar al flujo de salida estándar del intérprete en python. stdout se utiliza para mostrar la salida directamente en la consola de pantalla.

sys.stdout.flush() lo obligará a "vaciar" el búfer, lo que significa que escribirá todo en el búfer en la terminal, aunque normalmente esperaría. Otra forma de lograr la funcionalidad anterior es establecer el parámetro de descarga de la declaración de impresión en verdadero.

# Python3 program demonstrating working
# of flush during output and usage of
# flush parameter of print statement

import sys
import time

for i in range(10):
    print(i, end =' ')
    sys.stdout.flush()
	#print(i, end =' ', flush = True)
	time.sleep(1)

referencia:

Python + logging realiza la salida del registro y guarda en file_python logging output to file_Runner1st's Blog-CSDN Blog

Python - sys.stdout.flush () - GeeksforGeeks

Supongo que te gusta

Origin blog.csdn.net/qq_41458274/article/details/130567900
Recomendado
Clasificación