在python中我们经常要用print输出一些打印信息,一旦打印信息过多,由于信息没有颜色标记,重点不够突出,想要关闭也不容易找到位置。
这些问题,有了loguru就可以迎刃而解了。
loguru是一款日志记录工具,可以把日志用彩色的方式输出到控制台终端,也可以同时输出到文件中。但是直接安装的loguru不能直接代替print,因为参数不一样。
我们要把loguru稍微改造一下,以完全代替print实现彩色打印(当然也可以同时记录到文件中)。
首先安装loguru模块:
pip install loguru
然后找到loguru安装的目录,一般是在python环境的Lib\site-packages\loguru目录。
在该目录找到_logger.py,做如下的修改:
1.在头部增加import
from .my_print import my_print
2.修改下面几个函数,用于彩色输出
def debug(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'DEBUG'``."""
__message=(my_print(__message,*args))
__self._log("DEBUG", False, __self._options, __message, args, kwargs)
def info(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'INFO'``."""
__message=(my_print(__message,*args))
__self._log("INFO", False, __self._options, __message, args, kwargs)
def warning(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'WARNING'``."""
__message=(my_print(__message,*args))
__self._log("WARNING", False, __self._options, __message, args, kwargs)
def error(__self, __message, *args, **kwargs): # noqa: N805
r"""Log ``message.format(*args, **kwargs)`` with severity ``'ERROR'``."""
__message=(my_print(__message,*args))
__self._log("ERROR", False, __self._options, __message, args, kwargs)
3.在loguru目录下建立my_print.py模块,内容如下:
#my_print.py
import io
def my_print(*args, sep=' ', end='', file=None):
result = sep.join(str(arg) for arg in args) + end
# 创建一个字符串缓冲区
buffer = io.StringIO()
print(result, end=end,file=buffer)
# 读取缓冲区的内容
content = buffer.getvalue()
# 关闭缓冲区
buffer.close()
return content
接下来,你就可以用
logger.debug/info/warning/error直接替换print,输出彩色的打印了。
当然,你可以定义一个接口模块,例如my_loguru.py
from loguru import logger
import sys
# 清空所有设置
logger.remove()
# 添加控制台输出的格式,sys.stdout为输出到屏幕;关于这些配置还需要自定义请移步官网查看相关参数说明
logger.add(sys.stdout,
format="<green>{time:YYYYMMDD HH:mm:ss}</green>|" # 颜色>时间
"<level>{message}</level>| " # 日志内容
"<cyan>{module}</cyan>" # 模块名.方法名
":<cyan>{line}</cyan>" # 行号
)
def set_log_file(file):
logger.add(file,
format="<green>{time:YYYYMMDD HH:mm:ss}</green>|" # 颜色>时间
"<level>{message}</level>| " # 日志内容
"<cyan>{module}</cyan>" # 模块名.方法名
":<cyan>{line}</cyan>" # 行号
,enqueue=True)
PRINT_INFO=logger.info
PRINT_DEBUG=logger.debug
PRINT_WARNING=logger.warning
PRINT_ERROR=logger.error
然后
from my_loguru import PRINT_INFO,PRINT_DEBUG,PRINT_WARNING,PRINT_ERROR
用上面这4个接口替换print,实例如下:
import sys
from my_loguru import PRINT_INFO,PRINT_DEBUG,PRINT_WARNING,PRINT_ERROR
PRINT_INFO('12345','hello',eval('1+2*3'))
PRINT_DEBUG('12345','from')
PRINT_WARNING('12345','Tom')
PRINT_ERROR('12345','Cat')
输出的效果如下图:
和print接口用法完全一致,支持可变参数,可以直接替换print,同时可以用颜色突出重点,同时输出时间戳和打印语句所在的位置。完美收工!