首页 > 其他分享 >tabulate结合loguru打印出美观又方便查找的日志记录!

tabulate结合loguru打印出美观又方便查找的日志记录!

时间:2022-10-09 21:00:15浏览次数:87  
标签:log loguru 打印 html grid table 日志 tabulate

在开发过程中经常碰到在本地环境无法完成联调测试的情况,必须到统一的联机环境对接其他系统测试。往往是出现了BUG难以查找数据记录及时定位到错误出现的位置。

【阅读全文】

面对这种情况可能情况可能是一个简单的BUG导致的,但是定位问题往往就需要很长的时间。在python编程中推荐非标准库tabulate,它可以将程序运行过程中产生的数据记录格式化的打印出来很方便我们定位问题。

通过结合简单的日志非标准库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模块都导入进来就OK了,没有其他复杂的操作!

# 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所有的打印模式全部列举出来,有需要的大佬可以参考。

'''
"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打印一段数组形式的数据记录。

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模式来看看效果吧,这种模式之前没有使用过我很好奇它会打印出什么样的效果。

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底层代码块函数却只有一个pass?

我使用pangu模块做了一个文本格式化小工具!

ping命令的多种玩法,以前竟然只用它来测试网速!

标签:log,loguru,打印,html,grid,table,日志,tabulate
From: https://www.cnblogs.com/lwsbc/p/16773668.html

相关文章

  • Android日志的过滤方法
    Android应用启动之后,有时候根据项目需要,我们只需要指定的日志,过滤掉多余的日志,方式如下......
  • mysql创建函数时提示1418。可选关闭二进制日志或者设置log_bin_trust_function_creato
    报错详情如下:1418--ThisfunctionhasnoneofDETERMINISTIC,NOSQL,orREADSSQLDATAinitsdeclarationandbinaryloggingisenabled(you*might*wanttouse......
  • log4j日志按小时和大小划分
    <?xmlversion="1.0"encoding="UTF-8"?><!--日志规范:http://ydwiki.yidian-inc.com/pages/viewpage.action?pageId=95730245&focusedCommentId=95738856#comment-95738......
  • mysql5.7开启慢查询日志找出哪些sql查询慢
    因为慢查询日志等....日志都是耗性能及空间的,所以这里我只是临时开启连接上mysql,执行以下sqlshowvariableslike"%slow_query_log%";--查看慢查询相关变量setglob......
  • 日志相关技术
    1.查看日志:ps-ef|grepjava查看进程解压:gunzip解压gz文件查找文件:find/www -nameaa.txt 实时:tail-100ftest.log实时监控100行日志Ctrl+c是退出tail命令按......
  • 二十三: 其他数据库日志
    其他数据库日志我们在讲解数据库事务时,讲过两种日志:重做日志回滚日志。对于线上数据库应用系统,突然遭遇数据库宕机怎么办?在这种情况下,定位宕机的原因就非常关键。我......
  • 二十: MySql 事务日志
    MySql事务日志事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由锁机制实现。而事务的原子性、一致性和持......
  • 按时间区分备份日志
    脚本如下#!/bin/bash##源目录项目名称,需根据目录名进行调整project_name=/logs/alarm/##源目录basedir=/opt/logs/$project_name##备份目录backdir=/opt/back_logs/##定......
  • Flume和Logstash 都可以做日志收集,那有什么区别呢
      这个问题诞生于我和朋友的聊天,我问它最近在做什么,他说Flume,咱不懂呀,偷偷的百度了一下。短暂的看到也是做日志收集的,这让我瞬间想到了logstash,就是 ELK 组合中的一员......
  • python学习日志
    python学习日志语法简单和传统的C/C++、Java、C#等语言相比,Python对代码格式的要求没有那么严格,这种宽松使得用户在编写代码时比较舒服,不用在细枝末节上花费太多精力......