Python中使用tabulate与loguru生成美观结构化日志
本文介绍如何在Python开发中结合使用tabulate和loguru库,将程序运行数据以美观的结构化表格形式打印到日志中。通过示例演示了grid和html等多种打印模式,帮助开发者快速定位联调测试中的Bug,提升日志可读性与问题排查效率。
日志记录在联调测试中的挑战
在本地开发环境中,经常遇到无法直接完成联调测试的情况,必须部署到统一的联机环境与其他系统进行对接测试。此时若出现Bug,往往因为缺乏清晰的数据记录而难以快速定位错误发生的具体位置。
使用tabulate简化数据定位
这类问题有时仅由简单的Bug引起,但定位过程却可能耗时良久。在Python编程中,推荐使用非标准库tabulate,它能够将程序运行过程中产生的数据记录格式化为表格打印出来,从而极大地方便问题的定位与排查。
结合loguru生成美观日志
通过结合另一个非标准日志库loguru,可以非常快速地生成既美观又实用的日志记录。实际上,在一些文章的源码示例中,我们已经可以看到loguru的使用痕迹。
安装过程同样通过pip命令直接执行。由于loguru和tabulate均属于Python的非标准库,若未安装则需先进行安装。默认配置中我们使用清华大学的Python镜像站,用户也可根据需求选择其他可用的镜像源。
安装环境与依赖库
pip install loguru -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install tabulate - i https://pypi.tuna.tsinghua.edu.cn/simple/
完成准备工作后,只需将loguru和tabulate模块导入即可,无需其他复杂操作。
导入必要模块
# It's a shortcut to create a logger with the default configuration.
from loguru import logger
# It's importing the function `tabulate` from the module `tabulate`.
from tabulate import tabulate
关于非标准库tabulate,其打印模式种类繁多。虽然日常使用中可能只涉及几种常见模式,但下面将tabulate支持的所有打印模式全部列举出来,供有需要的开发者参考。
tabulate支持的打印模式列表
'''
"plain"
"simple"
"github"
"grid"
"fancy_grid"
"pipe"
"orgtbl"
"jira"
"presto"
"psql"
"rst"
"mediawiki"
"moinmoin"
"youtrack"
"html"
"latex"
"latex_raw"
"latex_booktabs"
"textile"
'''
我们选取其中一种'grid'模式来查看效果,因为这种模式打印出的数据记录格式较为常见。接下来创建一个名为tab_grid_log的函数,用于打印一段数组形式的数据记录。
grid模式日志打印示例
def tab_grid_log():
"""
> This function takes a list of lists and returns a list of lists with the log of each element
"""
# It's defining the header of the table.
header = [u'姓名', u'年龄', u'班级', u'成绩', u'表现']
# It's defining a list of lists.
table = [('Python', 20, 1710, 98, 5.0), ('Java', 22, 1810, 98, 4.9)]
# It's printing the table with the `grid` format.
logger.info(tabulate(table, headers=header, tablefmt='grid'))
tab_grid_log()
# 2022-09-17 18:33:00.472 | INFO | __main__:tab_grid_log:66 - +--------+--------+--------+--------+--------+
# | 姓名 | 年龄 | 班级 | 成绩 | 表现 |
# +========+========+========+========+========+
# | Python | 20 | 1710 | 98 | 5 |
# +--------+--------+--------+--------+--------+
# | Java | 22 | 1810 | 98 | 4.9 |
# +--------+--------+--------+--------+--------+
#
# Process finished with exit code 0
使用grid模式打印出的数据记录呈现为宫格形式,非常便于在日志中查找特定数据记录,这也是我们在日志记录中常用的一种打印方法。
接下来,我们随机选择另一种模式进行打印,这里选择html模式来观察其效果,因为之前未曾使用过,对其打印结果感到好奇。
html模式日志打印示例
def tab_html_log():
"""
> This function takes a log file and returns a html table of the log file
"""
# It's defining the header of the table.
header = [u'姓名', u'年龄', u'班级', u'成绩', u'表现']
# It's defining a list of lists.
table = [('Python', 20, 1710, 98, 5.0), ('Java', 22, 1810, 98, 4.9)]
# It's printing the table with the `html` format.
logger.info(tabulate(table, headers=header, tablefmt='html'))
tab_html_log()
# 2022-09-17 18:37:50.383 | INFO | __main__:tab_html_log:87 - <table>
# <thead>
# <tr><th>姓名 </th><th style="text-align: right;"> 年龄</th><th style="text-align: right;"> 班级</th><th style="text-align: right;"> 成绩</th><th style="text-align: right;"> 表现</th></tr>
# </thead>
# <tbody>
# <tr><td>Python</td><td style="text-align: right;"> 20</td><td style="text-align: right;"> 1710</td><td style="text-align: right;"> 98</td><td style="text-align: right;"> 5 </td></tr>
# <tr><td>Java </td><td style="text-align: right;"> 22</td><td style="text-align: right;"> 1810</td><td style="text-align: right;"> 98</td><td style="text-align: right;"> 4.9</td></tr>
# </tbody>
# </table>
从打印结果可以看出,使用html模式打印时,实际上生成的是HTML源码。这一功能相当智能,连style样式属性也一并填充完整。
至此,关于Python tabulate结合loguru打印出美观方便日志记录的介绍就到这里。更多相关Python tabulate与loguru打印日志记录的内容,请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













