Pandas:Python数据分析的王者,掌握它就掌握了数据

文摘   2024-10-31 18:27   广东  


▼点击下方卡片关注我

▲点击上方卡片关注我

记录日志是开发中必不可少的一环,就好比古代的史官,把发生的大事小情都记录在案。Python标准库提供的 logging 模块就是一把好手,不光能帮你记录程序运行的关键信息,还能灵活调整日志级别,让你在debug和线上环境如鱼得水。


基础配置秘笈

logging模块玩起来贼简单,三行代码就能整出个日志记录器:


1import logging

3# 配置日志输出格式和级别

4logging.basicConfig(

5 level=logging.INFO,

6 format='%(asctime)s - %(levelname)s - %(message)s'

7)

9# 开始记录日志

10logging.info('程序启动啦!')

11logging.warning('磁盘空间有点紧张...')

12logging.error('数据库连接失败!')

运行效果:


12024-10-29 10:23:45,123 - INFO - 程序启动啦!

22024-10-29 10:23:45,124 - WARNING - 磁盘空间有点紧张...

32024-10-29 10:23:45,125 - ERROR - 数据库连接失败!

⚠️ 小贴士:


  • basicConfig要在第一次调用logging相关方法前配置,不然就不生效了

  • format里的时间格式可以自定义,比如%Y-%m-%d %H:%M:%S

  • 默认日志级别是WARNING,低于这个级别的日志不会输出


日志级别大揭秘

日志级别说白了就是信息的重要程度,从低到高依次是:


  • DEBUG:调试信息,写着玩的

  • INFO:正常信息,值得记一笔

  • WARNING:警告信息,要注意了

  • ERROR:错误信息,出事了

  • CRITICAL:严重错误,完蛋了


    logging.debug(‘这条信息只有调试时才看得到’) logging.info(‘用户小明登录成功’) logging.warning(‘内存使用率超过80%’) logging.error(‘无法连接redis’) logging.critical(‘系统崩溃!’)



日志输出到文件

控制台日志看着不够劲?整个文件输出:


1import logging

3logging.basicConfig(

4 filename='app.log',

5 filemode='a', # a是追加模式,w是覆盖模式

6 level=logging.INFO,

7 format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'

8)

10logging.info('这条日志写到文件里了')

⚠️ 小贴士:


  • filemode默认是’a’,也就是追加模式

  • 文件路径最好用绝对路径,避免运行时找不到文件

  • 记得定期清理日志文件,别把硬盘写满了


自定义Logger

想要更细粒度的控制?来整个自定义Logger:


1import logging

3# 创建Logger对象

4logger = logging.getLogger('my_app')

5logger.setLevel(logging.DEBUG)

7# 创建控制台处理器

8console_handler = logging.StreamHandler()

9console_handler.setLevel(logging.INFO)

11# 创建文件处理器

12file_handler = logging.FileHandler('app.log')

13file_handler.setLevel(logging.ERROR)

15# 设置日志格式

16formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

17console_handler.setFormatter(formatter)

18file_handler.setFormatter(formatter)

20# 添加处理器

21logger.addHandler(console_handler)

22logger.addHandler(file_handler)

24# 开始使用

25logger.debug('调试信息') # 不会输出

26logger.info('普通信息') # 只输出到控制台

27logger.error('错误信息') # 同时输出到控制台和文件

⚠️ 小贴士:


  • 不同的handler可以设置不同的日志级别

  • 记得给handler设置formatter,不然日志格式会很难看

  • logger的级别要低于handler的级别,不然日志会被直接过滤掉


实战应用

写个函数计算成绩,顺便记录一下关键信息:


1import logging

3logging.basicConfig(level=logging.INFO)

4logger = logging.getLogger('grade_calculator')

6def calculate_grade(score):

7 logger.info(f'开始计算成绩,得分: {score}')

9 try:

10 if not isinstance(score, (int, float)):

11 raise TypeError('成绩必须是数字')

13 if score < 0 or score > 100:

14 raise ValueError('成绩必须在0-100之间')

16 if score >= 90:

17 grade = 'A'

18 elif score >= 80:

19 grade = 'B'

20 elif score >= 70:

21 grade = 'C'

22 elif score >= 60:

23 grade = 'D'

24 else:

25 grade = 'F'

27 logger.info(f'成绩计算完成,等级: {grade}')

28 return grade

30 except Exception as e:

31 logger.error(f'计算成绩时出错: {str(e)}')

32 raise

有了日志记录,debug问题的时候就不用到处print了,直接翻日志就知道程序在哪出问题。而且等你的程序上线后,有了日志才能知道用户在用你的程序时遇到了啥问题。


日志记录就是这么回事,掌握这些基本就够用了。要是想整点高级的,还可以研究下RotatingFileHandler(按大小分割日志文件)和TimedRotatingFileHandler(按时间分割日志文件)。


记住,好的日志记录习惯能让你少掉很多头发!


往期回顾

◆ Python打造智能闹钟:为你定制早起计划

◆ 用Python实现区块链:从零开始

◆ Python数据分析:从菜鸟到大神的进阶秘籍

点赞分享


流向你

墨香玄
每日陪伴,聊聊关于车的这些事,理性与感性双管齐下,饮茶品文,有缘共谈!
 最新文章