一起学Python-抛弃print,教你如何利用logging模块去写带有运行日志的程序/脚本

前言:

无论是工作还是学习中,排查程序错误的主要手段往往是通过程序的运行日志去查看,无论是开发,还是运维。也许会有小伙伴对程序运行日志的生成感到神奇(在写这个之前我也感觉很高大上),那等你看完本文你也能做出来了。

1、场景模拟

按照惯例,先来个场景模拟。

1.1、场景设计

假设产品经理要求写一个不算很长的Python脚本,主要作用是判断一个文件是否存在,代码内容如下:

import logging
import os
f = 't.txt'
if os.path.exists(f):
    print("文件[%s]已存在" %f)
else:
    print("文件[%s]未找到" %f)

然后试着执行,没问题。
在这里插入图片描述
但是这时候,新需求来了,产品经理要求判断N个文件是否存在,听那语气应该是挺多的,那该怎么办呢?

1.2、解决N个文件判断

大家可能会想,这个不是洒洒水吗?直接这样写:

import logging
import os
def check_file(f):
    if os.path.exists(f):
        print("文件[%s]已存在" %f)
    else:
        print("文件[%s]未找到" %f)

file_list = ['a.txt', 'b.txt', 'c.txt']
for i in file_list:
    check_file(f=i)

然后运行,成功实现需求(这里不深究文件传入方式)
在这里插入图片描述
如果你拿这个代码去提交,肯定会被骂一顿,为啥呢?因为起码有两个重要的点没有考虑:

  • 打包检测结果
  • 检测量

设想一下,如果你需要跑一万个文件的时候,你怎么给一个数据人家?

1.3、完美方案

俗话说脑子不如烂笔头,你总不能在检测完成之后再去背下检测结果或者去复制结果吧,那么既然如此,不如在执行每一个判断的时候都进行一个记录,省时省力。

1.3.1、使用logging进行运行时记录

理论我就先不讲了,代码如下:

import logging
import os
logger = logging.getLogger()
logger.setLevel('DEBUG')
BASIC_FORMAT = "%(asctime)s:%(levelname)s:%(message)s"
DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
formatter = logging.Formatter(BASIC_FORMAT, DATE_FORMAT)
chlr = logging.StreamHandler() # 输出到控制台的handler
chlr.setFormatter(formatter)
chlr.setLevel('DEBUG')  # 也可以不设置,不设置就默认用logger的level
fhlr = logging.FileHandler('run.txt') # 输出到文件的handler
fhlr.setFormatter(formatter)
logger.addHandler(chlr)
logger.addHandler(fhlr)
def check_file(f):
    if os.path.exists(f):
        log = ("文件 [%s] 已存在" %f)
        logger.info(log)
    else:
        err = ("文件[%s]未找到" %f)
        logger.error(err)
file_list = ['a.txt', 'b.txt', 'c.txt', 'run.txt']
for i in file_list:
    check_file(f=i)

运行结果:
在这里插入图片描述
然而你想就这样提交上去,那还是会被经理骂你,因为考虑的不够彻底。
时间不早了,该休息了,如果2020年10月底还没更新的话可以给我留言!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坐公交也用券

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值