导航菜单

运行日志,Python logging 模块的基本用法介绍



   04:39:28 老王科技

  

  在实际Python项目、工具部署时,不可能直接将所有的信息通过输出到控制台中。通常,我们会将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在出现故障时根据运行时产生的日志快速回溯、定位问题。

  logging 日志级别

  Python 标准库 logging 用作记录日志,默认分为六种日志级别,NOTSET、DEBUG、INFO、WARNING、ERROR、CRITICAL。

  logging 参数说明

  logging 使用非常简单,使用 basicConfig() 方法就能满足基本的使用需要,如果方法没有传入参数,会根据默认的配置创建Logger 对象,默认的日志级别被设置为WARNING,该函数可选的参数如下:

  参数说明:

  filename:日志输出到文件的文件名 。filemode: 文件模式,r[+]、w[+]、a[+] 。format: 日志输出的格式 。datefat: 日志附带日期时间的格式 。style: 格式占位符,默认为 ''%'' 和 “{}” 。level:设置日志输出级别 。stream: 定义输出流,用来初始化 StreamHandler 对象,不能 filename 参数一起使用,否则会ValueError 异常 。handles: 定义处理器,用来创建 Handler 对象,不能和 filename 、stream 参数一起使用,否则也会抛出 ValueError 异常 。

  输出至屏幕上

  

  如下:

  

  输出至日志文件中

  其中format 参数支持以下格式输出:

  %(levelno)s:打印日志级别的数值%(levelname)s:打印日志级别的名称%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]%(filename)s:打印当前执行程序名%(funcName)s:打印日志的当前函数%(lineno)d:打印日志的当前行号%(asctime)s:打印日志的时间%(thread)d:打印线程ID%(threadName)s:打印线程名称%(process)d:打印进程ID%(message)s:打印日志信息

  如下实现将日志格式化输出至指定日志文件中。

  

  日志内容如下:

  

  若输出中文日志,通过handlers=[logging.FileHandler(filename, encoding=''utf-8'')]参数避免中文乱码,如下

  

  日志文件内容如下:

  

  捕获程序异常

  我们可以通过logger.error(''Faild to open sklearn.txt from logger.error'',exc_info=True)捕获程序异常,输出至日志文件中,如下

  

  日志文件内容如下:

  

  也可以使用logger.exception(msg,args),它等同于logger.error(msg,exc_info=True,args),如下:

  

  日志文件内容如下:

  

  

  在实际Python项目、工具部署时,不可能直接将所有的信息通过输出到控制台中。通常,我们会将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在出现故障时根据运行时产生的日志快速回溯、定位问题。

  logging 日志级别

  Python 标准库 logging 用作记录日志,默认分为六种日志级别,NOTSET、DEBUG、INFO、WARNING、ERROR、CRITICAL。

  logging 参数说明

  logging 使用非常简单,使用 basicConfig() 方法就能满足基本的使用需要,如果方法没有传入参数,会根据默认的配置创建Logger 对象,默认的日志级别被设置为WARNING,该函数可选的参数如下:

  参数说明:

  filename:日志输出到文件的文件名 。filemode: 文件模式,r[+]、w[+]、a[+] 。format: 日志输出的格式 。datefat: 日志附带日期时间的格式 。style: 格式占位符,默认为 ''%'' 和 “{}” 。level:设置日志输出级别 。stream: 定义输出流,用来初始化 StreamHandler 对象,不能 filename 参数一起使用,否则会ValueError 异常 。handles: 定义处理器,用来创建 Handler 对象,不能和 filename 、stream 参数一起使用,否则也会抛出 ValueError 异常 。

  输出至屏幕上

  

  如下:

  

  输出至日志文件中

  其中format 参数支持以下格式输出:

  %(levelno)s:打印日志级别的数值%(levelname)s:打印日志级别的名称%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]%(filename)s:打印当前执行程序名%(funcName)s:打印日志的当前函数%(lineno)d:打印日志的当前行号%(asctime)s:打印日志的时间%(thread)d:打印线程ID%(threadName)s:打印线程名称%(process)d:打印进程ID%(message)s:打印日志信息

  如下实现将日志格式化输出至指定日志文件中。

  

  日志内容如下:

  

  若输出中文日志,通过handlers=[logging.FileHandler(filename, encoding=''utf-8'')]参数避免中文乱码,如下

  

  日志文件内容如下:

  

  捕获程序异常

  我们可以通过logger.error(''Faild to open sklearn.txt from logger.error'',exc_info=True)捕获程序异常,输出至日志文件中,如下

  

  日志文件内容如下:

  

  也可以使用logger.exception(msg,args),它等同于logger.error(msg,exc_info=True,args),如下:

  

  日志文件内容如下: