日志记录(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. 与MySQL的零距离接触

    存储引擎 查看数据表的创建命令:show create table tbl_name

  2. ./redis-trib.rb 报错:/usr/local/rvm/gems/ruby-2.4.2/gems/redis-4.0.1/lib/redis/client.rb:119:in `call': ERR Slot 0 is already busy (Redis::CommandError)

    错误提示是 slot插槽被占用了(这是 搭建集群前时,以前redis的旧数据和配置信息没有清理干净.) 解决方案是 用redis-cli 登录到每个节点执行  flushall  和 cluster ...

  3. MySQL->导出/导入资料[20180521]

    MySQL 导出     INTO OUTFILE将资料导出至文件中     mysqldump工具导出资料和数据结构,并且可以针对数据库.数据表.索引的结构.   INTO OUTFILE测试   ...

  4. lrzsz Linux服务器Windows互传文件工具

    lrzsz是一款在linux里可代替ftp上传和下载的程序,但只限于较小的文件,如果是目录需要打包成单个文件在实现下载. 条件:需要使用SecureCRT或者Xshell等客户端工具连接Linux 下 ...

  5. php实现姓名按首字母排序的类与方法

    php将名字按首字母进行排序 <?php public function getFirstChar($s){ $s0 = mb_substr($s,0,3); //获取名字的姓 $s = ico ...

  6. 一种比使用协程更方便的方法:Invoke(),同样达到等待执行的效果

    1.Invoke(string methodName,float time) 在一定时间调用methodName函数 using UnityEngine; using System.Collectio ...

  7. Git最常用的命令 总结

    stage/unstage  git add xxx.xx 和 git reset HEAD xxx.xx 前者将本地的修改提交到index(此操作成为stage,参考备注1),后者将已提交到inde ...

  8. Asp.Net Core存储Cookie不成功

    Asp.Net Core存储Cookie不成功 Asp.Net Core2.1生成的项目模板默认实现了<>,所以设置存储Cookie需要做一些处理. 1.第一种是在Startup的Conf ...

  9. OpenStack部署博客推荐

    OpenStack部署推荐博客 shhnwangjian https://www.cnblogs.com/shhnwangjian/category/942049.html(推荐) 点评: 1.实现过 ...

  10. 5.11-笨办法学python-习题13(argv)

    参考书目<learn python the hard way>——练习13 这个练习在Python上练了很多次,都运行不成功.在网上查了很多资料,发现很多人在练第13个练习的时候都有问题, ...