不管是普通print还是使用logging模块输出日志,如果日志信息带有自定义颜色和调用行数等信息那么会很方便程序调试。
先看效果
Demo.py 源码
#!/usr/bin/env python3
from logwrap import LogWrap
logwrap = LogWrap()
def socialism():
print(logwrap.blue("富强、民主、文明"))
print(logwrap.green("和谐、自由、平等"))
print(logwrap.yellow("公正、法治、爱国"))
print(logwrap.red("敬业、诚信、友善"))
socialism()
输出效果如下,源码中10-13行是上面4处调用logwrap对象函数在Demo.py中的行数.
logwrap.py 源码
__str_wrap 函数可从调用栈中获取调用模块,代码行数,以及函数名信息. 注意函数封装了多少层就要写多少个f_back . 比如在外部Demo.py中先调用logwrap.blue,然后里面调用了__str_wrap, 函数栈一共2个。则写2个f_back
colorama 模块是跨平台的文字颜色包装模块,先pip3 install colorama ,然后根据自己的喜好封装
import sys
import os
from colorama import init, Fore, Back, Style
init(autoreset=True)
class LogWrap(object):
def __str_wrap(self, info):
return '[ (%s:%s) $ %s ] %s' % (os.path.split(sys._getframe().f_back.f_back.f_code.co_filename)[1], sys._getframe().f_back.f_back.f_lineno, sys._getframe().f_back.f_back.f_code.co_name, info)
def blue(self, info):
info_tmp = self.__str_wrap(info)
return Fore.BLUE + info_tmp
def green(self, info):
info_tmp = self.__str_wrap(info)
return Fore.GREEN + info_tmp
def yellow(self, info):
info_tmp = self.__str_wrap(info)
return Fore.YELLOW + info_tmp
def red(self, info):
info_tmp = self.__str_wrap(info)
return Fore.RED + info_tmp
def white(self, info):
info_tmp = self.__str_wrap(info)
return Fore.WHITE + info_tmp