• python输出有色记录


    一.第三方模块coloredlogs

    # Create a logger object.
    import logging
    logger = logging.getLogger('your-module')
    
    # Initialize coloredlogs.
    import coloredlogs
    coloredlogs.install(level='DEBUG')
    
    # Some examples.
    logger.debug("this is a debugging message")
    logger.info("this is an informational message")
    logger.warn("this is a warning message")
    logger.error("this is an error message")
    logger.critical("this is a critical message")

    二.代码实现

    示例一

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    class bcolors:
        HEADER = '33[95m'
        OKBLUE = '33[94m'
        OKGREEN = '33[92m'
        WARNING = '33[93m'
        FAIL = '33[91m'
        ENDC = '33[0m'
    
        def disable(self):
            self.HEADER = ''
            self.OKBLUE = ''
            self.OKGREEN = ''
            self.WARNING = ''
            self.FAIL = ''
            self.ENDC = ''
    
    print bcolors.WARNING + "Warning: No active frommets remain. Continue?"
    print bcolors.OKBLUE + "Warning: No active frommets remain. Continue?" 
    print bcolors.OKGREEN + "Warning: No active frommets remain. Continue?"
    print bcolors.HEADER + "Warning: No active frommets remain. Continue?"
    print bcolors.FAIL + "Warning: No active frommets remain. Continue?"
    print bcolors.ENDC + "Warning: No active frommets remain. Continue?" 

     示例二

    import logging
    
    BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
    
    #The background is set with 40 plus the number of the color, and the foreground with 30
    
    #These are the sequences need to get colored ouput
    RESET_SEQ = "33[0m"
    COLOR_SEQ = "33[1;%dm"
    BOLD_SEQ = "33[1m"
    
    def formatter_message(message, use_color = True):
        if use_color:
            message = message.replace("$RESET", RESET_SEQ).replace("$BOLD", BOLD_SEQ)
        else:
            message = message.replace("$RESET", "").replace("$BOLD", "")
        return message
    
    COLORS = {
        'WARNING': YELLOW,
        'INFO': WHITE,
        'DEBUG': BLUE,
        'CRITICAL': YELLOW,
        'ERROR': RED
    }
    
    class ColoredFormatter(logging.Formatter):
        def __init__(self, msg, use_color = True):
            logging.Formatter.__init__(self, msg)
            self.use_color = use_color
    
        def format(self, record):
            levelname = record.levelname
            if self.use_color and levelname in COLORS:
                levelname_color = COLOR_SEQ % (30 + COLORS[levelname]) + levelname + RESET_SEQ
                record.levelname = levelname_color
            return logging.Formatter.format(self, record)
    
    
    # Custom logger class with multiple destinations
    class ColoredLogger(logging.Logger):
        FORMAT = "[$BOLD%(name)-20s$RESET][%(levelname)-18s]  %(message)s ($BOLD%(filename)s$RESET:%(lineno)d)"
        COLOR_FORMAT = formatter_message(FORMAT, True)
        def __init__(self, name):
            logging.Logger.__init__(self, name, logging.DEBUG)                
            color_formatter = ColoredFormatter(self.COLOR_FORMAT)
            console = logging.StreamHandler()
            console.setFormatter(color_formatter)
    
            self.addHandler(console)
            return
    
    # 
    
    logging.setLoggerClass(ColoredLogger)
    color_log = logging.getLogger(__name__)
    color_log.setLevel(logging.DEBUG)
    
    color_log.debug("test")
    color_log.info("test")
    color_log.warning("test")
    color_log.error("test")
    color_log.critical("test")

     

    Windows下python环境

    转自:https://www.oschina.net/code/snippet_614988_26500

    #! /usr/bin/env python
    # coding: utf-8
    import logging,os
    import ctypes
     
    FOREGROUND_WHITE = 0x0007
    FOREGROUND_BLUE = 0x01 # text color contains blue.
    FOREGROUND_GREEN= 0x02 # text color contains green.
    FOREGROUND_RED  = 0x04 # text color contains red.
    FOREGROUND_YELLOW = FOREGROUND_RED | FOREGROUND_GREEN
     
    STD_OUTPUT_HANDLE= -11
    std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
    def set_color(color, handle=std_out_handle):
        bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
        return bool
     
     
    class Logger:
        def __init__(self, path,clevel = logging.DEBUG,Flevel = logging.DEBUG):
            self.logger = logging.getLogger(path)
            self.logger.setLevel(logging.DEBUG)
            fmt = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')
            #设置CMD日志
            sh = logging.StreamHandler()
            sh.setFormatter(fmt)
            sh.setLevel(clevel)
            #设置文件日志
            fh = logging.FileHandler(path)
            fh.setFormatter(fmt)
            fh.setLevel(Flevel)
            self.logger.addHandler(sh)
            self.logger.addHandler(fh)
     
        def debug(self,message):
            self.logger.debug(message)
     
        def info(self,message):
            self.logger.info(message)
     
        def war(self,message,color=FOREGROUND_YELLOW):
            set_color(color)
            self.logger.warn(message)
            set_color(FOREGROUND_WHITE)
     
        def error(self,message,color=FOREGROUND_RED):
            set_color(color)
            self.logger.error(message)
            set_color(FOREGROUND_WHITE)
     
        def cri(self,message):
            self.logger.critical(message)
     
     
     
    if __name__ =='__main__':
        logyyx = Logger('yyx.log',logging.WARNING,logging.DEBUG)
        logyyx.debug('一个debug信息')
        logyyx.info('一个info信息')
        logyyx.war('一个warning信息')
        logyyx.error('一个error信息')
        logyyx.cri('一个致命critical信息')
  • 相关阅读:
    三维坐标变换习题
    1 Introduction and Roadmap
    快讯:2019 OOW 文档已提供下载
    过了35岁,90%以上DBA都在迷茫:未来要何去何从?
    深度学习入门笔记(五):神经网络的编程基础
    《算法图解》学习笔记(十):K 最近邻算法(附代码)
    LNMP环境搭建之php安装
    LNMP环境搭建之php安装
    LNMP环境搭建之php安装
    (PSO-BP)结合粒子群的神经网络算法以及matlab实现
  • 原文地址:https://www.cnblogs.com/ssooking/p/6518886.html
Copyright © 2020-2023  润新知