美文网首页
Python彩色格式化输出模块

Python彩色格式化输出模块

作者: 平仄_pingze | 来源:发表于2018-04-24 14:57 被阅读127次

Python自身的logger支持格式化输出,但没有颜色区分,也只能接收字符串参数。为了增加这些功能并方便拓展,自己写了一个logger模块。

源码

# logger.py
import sys
import datetime

_COLOR_CODE = {
  'red': 31,
  'green': 32,
  'yellow': 33,
  'blue': 34,
  'purple': 35,
  'cyan': 36,
  'gray': 37,
}

class LOG_LEVEL(object):
    DEBUG = 1
    INFO = 2
    WARN = 3
    WARNING = 3
    ERROR = 4


class Logger():
    '''
    日志输出类
    支持多个非字符串参数自动格式化
    支持前缀定制
    支持ANSI颜色
    '''
    info = None
    debug = None
    warning = None
    error = None
    def __init__(self,
                 name=__name__,
                 level=LOG_LEVEL.DEBUG,
                 format='[{time}][{levelname}] - {message}',
                 datefmt='%Y-%m-%d %H:%M:%S',
                 colored = True
                 ):
        self._name = name
        self._level = level
        self._format = format
        self._datefmt = datefmt
        self._colored = colored
        if self._colored:
            self._format = self._format_coloring()

    def set_config(self,
            name=__name__,
            level=LOG_LEVEL.DEBUG,
            format='[{time}][{levelname}] - {message}',
            datefmt='%Y-%m-%d %H:%M:%S',
            colored=True
            ):
        self._name = name
        self._level = level
        self._format = format
        self._datefmt = datefmt
        self._colored = colored
        if self._colored:
            self._format = self._format_coloring()

    def _format_coloring(self):
        parts = self._format.partition('{message}')
        parts_colored = [self._color_format(part) if part != '{message}' else '{message}'
                         for part in parts
                         if len(part.strip()) > 0]
        return ''.join(parts_colored)

    def _color_format(self, text):
        return '\x1b[{{color}}m{text}\x1b[0m'.format(color='color', text=text)

def _log_func_create(level, level_name, color):
    def log_func(self, *args):
        if self._level > level:
            return
        out = ''
        for arg in args:
            out += str(arg) + ' '
        out_full = self._format.format(
            time=datetime.datetime.now().strftime(self._datefmt),
            levelname=level_name,
            message=out,
            name=self._name,
            color=color
        )
        sys.stdout.write(out_full + '\n')
    return log_func

setattr(Logger, 'debug', _log_func_create(LOG_LEVEL.DEBUG, 'DEBUG', _COLOR_CODE['cyan']))
setattr(Logger, 'info', _log_func_create(LOG_LEVEL.INFO, 'INFO', _COLOR_CODE['green']))
setattr(Logger, 'warning', _log_func_create(LOG_LEVEL.WARN, 'WARN', _COLOR_CODE['yellow']))
setattr(Logger, 'error', _log_func_create(LOG_LEVEL.ERROR, 'ERRO', _COLOR_CODE['red']))

logger = Logger()

使用

# main.py
from logger import logger, LOG_LEVEL
logger.set_config(
  level = LOG_LEVEL.INFO # 设置最低打印等级为INFO
)
# other.py
from logger import logger
logger.debug('输出debug', [], {}) # 由于设置,不会打印出来
logger.info('输出info', [], {})
logger.warning('输出warning', [], {})
logger.error('输出error', [], {})

相关文章

  • Python彩色格式化输出模块

    Python自身的logger支持格式化输出,但没有颜色区分,也只能接收字符串参数。为了增加这些功能并方便拓展,自...

  • python基础知识(3)

    python字符串 python转义字符 python字符串运算符 python字符串格式化 python格式化操...

  • 字符串的格式化操作

    旧式字符串格式化%运算符,位置格式化(python2) str.format字符串格式化(python3,它存在一...

  • python2,3的小秘密

    Python字符串格式化,有两个版本 1.Python2.5之前,我们使用的使用老式的格式化 2.Python3....

  • 实战

    python的格式化输出 #python格式化输出 ##%对于未知变量类型,用这样就不太方便了 name='lis...

  • 格式化Curl返回的Json字符

    格式化Curl返回的Json字符 格式化Curl返回的Json字符Python 格式化Nodejs 格式化 经常会...

  • Python学习笔记-3群18组-杜杜狼-2017.7.26

    在昨天的学习中发现自己对python的格式化还不明白,今天专门研究一下格式化。 Python格式化学习 Pytho...

  • 4.2 Python

    4.2.1. 格式化字符串   在Python中,有两种格式化字符串的方式,在Python2的较低版本中,格式化字...

  • 013.Python格式化

    Python格式化 1. 概述 Python2.6 开始,新增了一种格式化字符串的函数 str.format(),...

  • format() 格式化函数

    Python format 格式化函数 | 菜鸟教程

网友评论

      本文标题:Python彩色格式化输出模块

      本文链接:https://www.haomeiwen.com/subject/pvrjlftx.html