日志记录(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. 让IIS 7 如同IIS 8 第一次请求不变慢(转载)

    当我们把网站部署在IIS7或IIS6S的时候,每当IIS或是Application Pool重启后,或者站点在长时间没有请求访问后,第一次请求网站反应总是很慢.所以每次网站更新都会给第一个用户带来不好 ...

  2. git相关命令

    查看分支:git branch创建分支:git branch <name>切换分支:git checkout <name>创建+切换分支:git checkout -b < ...

  3. 处理HTML表单(11)

    PHP和Web表单 <?php if(isset($_POST["name"])){//isset()函数设置变量是否设置,并且不能为空 $name = $_POST[&qu ...

  4. ubuntu 安装linux 下vmVMware tools 步骤及问题解决

    一. 菜单栏     “虚拟机” ——> “设置 ”     使用linux.so镜像文件    此文件在vmware workstation 的安装目录.并且打开CD/DVD的连接. 二.终端 ...

  5. linux学习笔记一:远程连接linux服务器

    环境介绍:win7电脑,通过VM虚拟出linux系统,安装centOS7 通过Xshell连接linux,ftp访问服务器资源. 遇到的问题,ftp连不上linux 解决:linux上安装ftp服务 ...

  6. Redis之Redis事务

    Redis事务的概念: Redis 事务的本质是一组命令的集合.事务支持一次执行多个命令,一个事务中所有命令都会被序列化.在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会 ...

  7. Redis之配置文件redis.conf

    解读下 redis.conf 配置文件中常用的配置项,为不显得过于臃长,已选择性删除原配置文件中部分注释. # Redis must be started with the file path as ...

  8. PHP获取一篇文章内容中的全部图片,并下载

  9. Java实例 Part6:Java中的克隆

    目录 Part6:Java中的克隆 Example01:Java对象的假克隆 Example02:Java对象的浅克隆 Example03:Java对象的深克隆 Example04:序列化与对象克隆 ...

  10. 第三章:文件I/O

    本章开始讨论UNIX系统的文件I/O函数,包括打开文件.读文件.写文件等. UNIX系统中的大多数文件I/O只需要用到5个函数:open.read.write.lseek和close.它们每执行一次都 ...