日志记录(Logging)

More than print

每次用 terminal debug 时都要手动在各种可能出现 bug 的地方 print 相关信息来确认 bug 的位置;

每次完成 debug 后为了避免输出太多细节信息和代码整洁,又需要把几个关键位置的 print 注释掉甚至删掉;

当下次出 bug 时,继续上述步骤。。。

有没有更好的方法呢?

等级(Level )

Python 3 中提供了非常方便的日志记录库 logging,可以记录不同等级(level)的日志信息。系统默认的等级有:

  • DEBUG - 等级最低,一般只有在调试程序时显示的提示信息;
  • INFO - 用于追踪、确认程序运行正常;
  • WARNING - 表示一些不期望事情的发生或即将发生(比如网络状况差,磁盘空间即将耗尽等)但不影响程序运行;
  • ERROR - 由于某些问题,导致程序的部分功能出错;
  • CRITICAL - 等级最高,用于提示严重错误,严重到可能让程序崩溃。

logging 中的默认等级是 WARNING;亦即,logging.level缺省时,等级低于 WARNING 的信息(DEBUGINFO)不会被日志记录。

基本用法

初始化更改等级为 DEBUG

import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug('Message from DEBUG')
logging.info('Message from INFO')
logging.warning('Message from WARNING')

运行后将在 stdout 显示日志信息:

DEBUG:root:Message from DEBUG
INFO:root:Message from INFO
WARNING:root:Message from WARNING

记录到日志文件 “example.log”

import logging
logging.basicConfig(filename='example.log', level=logging.DEBUG)
logging.debug('Message from DEBUG')
logging.info('Message from INFO')
logging.warning('Message from WARNING')

运行后查看文件 example.log:

$ cat example.log

将看到日志信息。

注意:文件操作模式默认为 “append”,即不覆盖旧文件内容。

每次运行覆盖日志文件

import logging
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
logging.debug('Message from DEBUG')
logging.info('Message from INFO')
logging.warning('Message from WARNING')

自定义日志文件格式

import logging
logging.basicConfig(filename='data_conversion.log',
filemode='w',
format='%(asctime)s [%(levelname)s]: %(message)s',
datefmt='%Y/%m/%d %I:%M:%S %p',
level=logging.INFO) logging.debug('Message from DEBUG')
logging.info('Message from INFO')
logging.warning('Message from WARNING')

日志文件内容为:

2019/01/28 10:26:29 PM [DEBUG]: Message from DEBUG
2019/01/28 10:26:29 PM [INFO]: Message from INFO
2019/01/28 10:26:29 PM [WARNING]: Message from WARNING

根据以上内容就可以简单地追踪程序流程和关键信息了。

Reference


Written with StackEdit.

Python 日志记录与程序流追踪(基础篇)的更多相关文章

  1. Python日志记录(Logging)

    日志记录跟程序的测试相关,并且在大幅度更改程序内核时很有用,它可以帮助我们找到问题和错误的所在.日志记录基本上就是收集与程序运行有关的数据,这样可以在随后进行检查或者累计数据. 1.简单示例 在Pyt ...

  2. 实例学习SSIS(四)--使用日志记录和错误流重定向

    原文:实例学习SSIS(四)--使用日志记录和错误流重定向 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习 ...

  3. python日志记录-logging模块

    1.logging模块日志级别 使用logging模块简单示例: >>>import logging >>>logging.debug("this's a ...

  4. Python日志记录

    官方文档:https://docs.python.org/2/library/logging.html logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为, ...

  5. [蟒蛇菜谱]Python日志记录最佳实践

    # -*- coding: utf8 -*- import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.set ...

  6. Python日志记录(logging)

    import logging logfile = 'e:\\a.txt' # logging.basicConfig(filename=logfile,level=logging.INFO) # lo ...

  7. python学习笔记五 模块下(基础篇)

    shevle 模块 扩展pickle模块... 1.潜在的陷进 >>> import shelve>>> s = shelve.open("nb" ...

  8. python学习笔记六 面向对象相关下(基础篇)

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以将多函数中公用的变量封装到对象中) 对象,根据模板创建的 ...

  9. Python学习笔记整理总结【语言基础篇】

    一.变量赋值及命名规则① 声明一个变量及赋值 #!/usr/bin/env python # -*- coding:utf-8 -*- # _author_soloLi name1="sol ...

随机推荐

  1. 3.Spring Cloud初相识--------Ribbon客户端负载均衡

    前言: 在生产环境中,未避免单点故障,每个微服务都会做高可用部署. 通白的说,就是每一个一模一样的服务会根据需求提供多分在多台机器上. 那么在大并发的情况下,如何分配服务可以快速得到响应,就成为了我们 ...

  2. iOS:UITableView相关(18-10-20更)

    UITableView用得较多,遇到的情况也较多,单独记录一篇. 一.零散的技巧 二.取cell 三.cell高度 四.导航栏.TableView常见问题相关 五.自定义左滑删除按钮图片 六.仅做了解 ...

  3. java实现zabbix接口开发

    API:https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/user/login 如果你使用jar包开发的话,会出现*** ...

  4. maven多模块部署(转载)

    [Maven]使用Maven构建多模块项目 Maven多模块项目 Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理.尤其是一些开源框架,也是采用多模块的 ...

  5. Homebrew(brew)安装MySQL成功后无法登录

    Homebrew简称brew,OSX上的软件包管理工具,在Mac终端可以通过brew安装.更新.卸载各种软件,(简直就是神器级武器). 废话不多说,没安装brew自己去百度学习安装,这里就不多说了. ...

  6. 【原创】CRM 2015/2016,SSRS 生成PDF文件,幷以附件的形式发送邮件

    主要步骤如下: 生成一条邮件记录 生成一条ActivityParty记录 生成PDF文件,并以Base64添加到ActivityMimeAttachment 中去 打开发送邮件窗口,以便编辑及发送邮件 ...

  7. Kb Article Helper

    using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; using Microsoft.Xrm.Sdk.Que ...

  8. 编写Makefile规则

    一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 ...

  9. makefile中重载与取消隐藏规则示例

    学习<跟我一起写Makefile-陈皓>后一直不懂,如何重载或取消隐藏规则 为了博客版面整洁,何为隐藏规则,Makefile基本规则编写等基础支持请自行百度. 需要声明的是:这些知识可能在 ...

  10. 20155207 2006-2007-2 《Java程序设计》第3周学习总结

    20155207 2006-2007-2 <Java程序设计>第X周学习总结 教材学习内容总结 比较字符串实际字符内容是否相同,不要使用==,要使用equals() 关于类的语法问题 pu ...