registro de registro con color

 

La función de impresión se usa generalmente cuando se imprime en la consola, pero si necesitamos imprimir alguna información de progreso, que generalmente contiene un formato unificado, ¿es más engorroso usar la función de impresión? Además, cuando necesita escribir información en un archivo, cree un archivo y escriba La información, la gestión de archivos y la apertura y cierre frecuentes no son más peligrosos. Para el lenguaje Python, un módulo de registro puede resolver los problemas anteriores.

1. Configuración de formato

Utilice el registro directamente en lugar de donde necesita imprimir. El registro se divide en cinco niveles: depuración, información, advertencia, error y crítico (los niveles se incrementan secuencialmente). De forma predeterminada, solo se imprimen los niveles superiores a la advertencia: advertencia, error y crítico. Si necesita imprimir el registro anterior de depuración y modificar el formato de impresión, debe configurar el registro a través de la función basicConfig.

logging.basicConfig(format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s',
                    level=logging.DEBUG)

Entre ellos, el formato para configurar el formato de impresión, el significado específico puede referirse a https://blog.csdn.net/orca123456/article/details/84864785

nivel es el nivel mínimo para la impresión. Debido a que depuración <información <advertencia <error <crítica, cuando se establece en depuración, se imprimirán todos los niveles de registros.

Segundo, guarde el archivo

 Por defecto, el registro solo se envía a la consola y no se guardará en el sistema de archivos. Si necesita guardar el registro, debe obtener el objeto de registro a través del método getLogger () para configurarlo. Consulte https://www.cnblogs.com/nancyzhu/p/8551506.html

import logging
from logging import handlers

class Logger(object):
    level_relations = {
        'debug':logging.DEBUG,
        'info':logging.INFO,
        'warning':logging.WARNING,
        'error':logging.ERROR,
        'crit':logging.CRITICAL
    }#日志级别关系映射

    def __init__(self,filename,level='info',when='D',backCount=3,fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
        self.logger = logging.getLogger(filename)
        format_str = logging.Formatter(fmt)#设置日志格式
        self.logger.setLevel(self.level_relations.get(level))#设置日志级别
        sh = logging.StreamHandler()#往屏幕上输出
        sh.setFormatter(format_str) #设置屏幕上显示的格式
        th = handlers.TimedRotatingFileHandler(filename=filename,when=when,backupCount=backCount,encoding='utf-8')#往文件里写入#指定间隔时间自动生成文件的处理器
        #实例化TimedRotatingFileHandler
        #interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:
        # S 秒
        # M 分
        # H 小时、
        # D 天、
        # W 每星期(interval==0时代表星期一)
        # midnight 每天凌晨
        th.setFormatter(format_str)#设置文件里写入的格式
        self.logger.addHandler(sh) #把对象加到logger里
        self.logger.addHandler(th)
if __name__ == '__main__':
    log = Logger('all.log',level='debug')
    log.logger.debug('debug')
    log.logger.info('info')
    log.logger.warning('警告')
    log.logger.error('报错')
    log.logger.critical('严重')
    Logger('error.log', level='error').logger.error('error')

 

Tres, con registro de color

En circunstancias normales, queremos registros con colores, generalmente los errores y los críticos se indican en rojo, la advertencia se indica en naranja y la información se indica en verde. Además, no quiero usar log.logger durante tanto tiempo, y no quiero regenerar un objeto cada vez antes de la aplicación. La siguiente es la implementación específica.

import logging
from colorma import Fore,style


# 获取对象
def get_logger():
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)

    if not logger.handlers:
        ch = logging.StreamHandler(sys.stdout)
        ch.setLevel(logging.DEBUG)
        formatter = logging.Formatter(
            " %(message)s")
        ch.setFormatter(formatter)
        logger.addHandler(ch)
    return logger

#通过静态成员方法来调用
class Log:

    logger = get_logger()

    @staticmethod
    def debug(msg):
        Log.logger.debug(Fore.WHITE + "[DEBUG]: " + str(msg) + Style.RESET_ALL)

    @staticmethod
    def info(msg):
        Log.logger.info(Fore.GREEN + "[INFO]: " + str(msg) + Style.RESET_ALL)

    @staticmethod
    def warning(msg):
        Log.logger.warning("\033[38;5;214m" + "[WARNING]: " + str(msg) + "\033[m")

    @staticmethod
    def error(msg):
        Log.logger.error(Fore.RED + "[ERROR]: " + str(msg) + Style.RESET_ALL)

    @staticmethod
    def critical(msg):
        Log.logger.critical(Fore.RED + "[CRITICAL]: " + str(msg) + Style.RESET_ALL)

Cuando lo usa, solo necesita importar el Registro, puede usarlo directamente en lugares específicos (como Log.info ("Soy verde")), y puede ver que el color del registro ha cambiado.

Pero cuando el archivo necesita ser escrito, ¿cómo se puede pasar el nombre del archivo a través de la encapsulación? Este contenido se actualizará más tarde.

Publicado 42 artículos originales · elogiado 4 · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/wangyhwyh753/article/details/105277142
Recomendado
Clasificación