Python学习:logging模块

关于日志

日志是对软件执行时所发生的事情的一种追踪的方式。

软件开发人员对于他们的代码添加日志记录调用,借此来指示某个事件的发生。

事件通过包含变量数据的描述信息来描述的。

软件开发人员还会区分不同事件的重要性,即将不同的事件区分为不同的等级、或者严重程度。

事件严重等级划分

日志所追踪的事件的严重程度划分,以及各个等级所对应的适用程度如下:

级别 何时使用
debug 事件的细节信息,当诊断问题时使用
info 确认程序按照预期运行
warning 表示有已知,或者即将发生的意外,但是程序还可以按照预期运行
error 由于严重的问题。程序的某些功能已经不能正常执行
critical 严重的错误,使得程序无法继续执行

模块定义的基本类

在logging模块,定义了几个基本的类,以实现日志的全部功能,各个基本的类定义如下:

  1. Logger、暴露了应用程序代码可直接使用的日志api接口;
  2. Handler、将Logger创建的日志记录发送到恰当的目标地点;
  3. Filter、提供更精细的设施,用于确定要输出的日志记录;
  4. Formatter、指定最终输出的日志记录的格式。

每个想使用日志功能的模块或者应用,使用一个Logger实例将日志信息添加到日志中。Logger将创建LogRecord实例用来将日志事件信息保存在内存中。Logger可以有多个Handler实例用来接收与处理日志记录,而Handler实例将使用Formatter实例将日志记录转换为输出信息格式。

记录日志到文件

大多数应用需配置日志记录到文件,范例如下:

import logging

logging.basicConfig(filename='test.out', level=logging.DEBUG)
logging.debug('this message should go to the log file')

with open('test.out', 'rt') as f:
    body = f.read()
    
print(body)

在发生异常时,需记录异常的日志事件,直接使用无参数的debug、info、warning、error、或者critical函数并不能记录异常信息,需要设置exc_info参数为True,或者使用exception方法。范例如下:

import logging

logging.basicConfig(filename="test.log", filemode="w", 
                    format="%(asctime)s %(name)s:%(levelname)s:%(message)s", 
                    datefmt="%d-%M-%Y %H:%M:%S", 
                    level=logging.DEBUG)
a = 5
b = 0
try:
    c = a / b
except Exception as e:
    #下面三种方式三选一,推荐使用第一种
    logging.exception("Exception occurred")
    logging.error("Exception occurred", exc_info=True)
    logging.log(level=logging.DEBUG, msg="Exception occurred", exc_info=True)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章