Python中使用tabulate与loguru生成美观结构化日志

林见深
林见深
发布时间:2026-10-16 | 5人浏览过
原创

本文介绍如何在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打印日志记录的内容,请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表