Python 日志记录与程序流追踪(基础篇)

日志记录(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.

原文地址:https://www.cnblogs.com/LexLuc/p/10332090.html

时间: 2024-10-10 15:59:41

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

黑马程序员——Java基础篇之对象归要

1.static关键字 1.1.static可以修饰成员变量,成员方法,还有类(其中这里的类是内部类) 1.2.static修饰的部分会随着类的加载而加载: 加载过程:当JVM执行static修饰的代码时,会在内存的共享区给static部分开辟一个空间,供该类持有,static部分不是某个对象的部分,而是该类共有的,所以当一个函数会被多个对象调用时,最好定义成static,这样比较节省空间. 1.3.静态方法只能访问静态成员 原因:如果静态方法中调用了非静态的变量,那么由于静态方法是随着类的加载

日志记录.01_内存流操作

日志记录,我们一般通过本地文本文件进行记录,对于使用的文件后缀名,一般为比较形象的 .log ,当然也可以是其它任何自定义的格式, 如: .abc,  .xyz 本次随笔主要描述的是借用内在存流来处理日志记录 TMemoryStream; 01. 日志记录,我们无创建一个用于记录的文件. 使用函数 FileCreate(文件路径), 可以是绝对路径,也可以是相对路径 ♦ 注意一点:  FileCreate 函数会覆盖原有的内容; 而且还不会进行提示; ♦ 在实际使用过程中,最好通过 FileEx

Python 日志记录模块logging的使用

shell当中记录log,满眼花花的重定向符合,看着很不爽有没有!我喜欢python,就是喜欢这种买个手电筒,备用电池都准备好了的感觉.logging模块很简单,导入模块,定义日志格式.代码中就可以通过logging.info(),logging.warning(),logging.debug()记录日志了.而且立刻感觉整个人好了很多-- import logging logging.basicConfig(level=logging.DEBUG,                 format=

python日志记录-logging模块

1.logging模块日志级别 使用logging模块简单示例: >>>import logging >>>logging.debug("this's a test logging") >>>loggin.info("still a test logging") # 默认情况下以上两行没有输出,需要指定日志级别才行 >>>logging.warn("it's waring!!!&quo

谈谈Python实战数据可视化之pygal模块(基础篇)

前沿 对于需要在尺寸不同的屏幕上显示的图表,请考虑使用Pygal来生成它们,因为它们将自动缩放,以适合观看者的屏幕,这样它们在任何设备上显示时都会很美观.接下来我会谈谈pygal模块生成线.直方图的基本用法,用书本骰子的案例来更深入了解pygal模块的使用,对于pygal其他图形的创建其实方法差不多,实际运用时需要制作哪种图形就去官网查询,官网有很多图形创建的示例代码,pygal画廊官网链接:http://www.pygal.org/如下方图(有图有代码,自己打一遍其实懂得也差不多了): pyg

log4j教程 11、日志记录到文件

要写日志信息到一个文件中,必须使用org.apache.log4j.FileAppender.有以下FileAppender的配置参数: FileAppender配置: 属性 描述 immediateFlush 标志的默认设置为true,这意味着输出流的文件被刷新,在每个追加操作 encoding 它可以使用任何字符编码.默认情况下是特定于平台的编码方案 threshold 这个 appender 阈值级别 Filename 日志文件的名称 fileAppend 默认设置为true,这意味着记录

日志记录的作用和方法

程序中记录日志一般有两个目的:Troubleshooting和显示程序运行状态.好的日志记录方式可以提供我们足够多定位问题的依据.日志记录大家都会认为简单,但如何通过日志可以高效定位问题并不是简单的事情.这里列举下面三个方面的内容,辅以代码示例,总结如何写好日志,希望对他人有所启发和帮助: 怎样记日志可以方便Troubleshooting 程序运行状态可以记哪些 应该避免怎样的日志方式 怎样记日志可以方便Troubleshooting? 1. 对外部的调用封装 程序中对外部系统与模块的依赖调用前

日志记录函数

错误日志记录在程序运行的实际维护中定位问题具有很大作用,日志越详细,反馈处理问题越方便. 常用的一个B/S架构下的日志函数. //日志记录函数 private void WriteLog( string msgInfo) { try {      string fileName = System.Web.HttpContext.Current.Server.MapPath("~/"); // System.Environment.CurrentDirectory; if (fileNa

java基础篇IO流的规律

前两篇降了IO流中的字节流和字符流复制的例子,今天来总结一下IO流的规律 掌握好IO流的规律,再开发中会很好用 下面来总结一下: 1,明确源和目的 源:输入流 InputStream 和Reader 目的:输出流 OutputStream 和Writer 2,操作的数据是否是纯文本. 是:使用字符流 不是:使用字节流 3,当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分 源设备: 内存,硬盘,键盘 目的设备: 内存,硬盘,控制台 这里的源就是你想进行的操作,比如说你想从c盘复制一个文