一种对程序运行时事件追踪记录的手段,用于程序调试报错定位与分析等等。
python内置库,主要用于格式化控制输出至文件,邮件,终端等等,该模块提供了很多功能和灵活性。
python官方文档logging模块
级别 | 说明 |
---|---|
DEBUG | 详细信息,通常仅在诊断问题时才需要。 |
INFO | 确认一切正常。 |
WARNING | 表示发生了意外情况,或者表示在不久的将来出现了某些问题(例如“磁盘空间不足”)。该软件仍按预期运行。 |
ERROR | 由于存在更严重的问题,该软件无法执行某些功能。 |
CRITICAL | 严重错误,表明程序本身可能无法继续运行。 |
文档中有写,大家可以参考文档的。
日志记录库采用模块化方法,并提供了几类组件:记录器,处理程序,过滤器和格式化程序。
记录器(logger):公开了应用程序代码直接使用的接口。
处理器(handler):将日志记录(由记录器创建)发送到适当的目的地。
筛选器(filter):提供了更细粒度的功能,用于确定要输出的日志记录。
格式化器(formatter):在最终输出中指定日志记录的布局。
记录器默认名称为root。
命名记录器时,一个好的习惯是在每个使用日志记录的模块中使用模块级记录器。
多次调用getLogger()相同的名称将始终返回对同一Logger对象的引用。
# 导入logging
import logging
# 创建记录器
logger = logging.getLogger(__name__)
# 设置记录器级别
logger.setLevel(logging.DEBUG)
# 创建控制台处理器
console_handler = logging.StreamHandler()
# 创建文件处理器
file_handler = logging.FileHandler(filename='./log.log', encoding='UTF-8')
# 从记录器对象中添加处理程序对象
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# 设置格式化并赋予处理器
formatter = logging.Formatter(
'时间:%(asctime)s - 日志名称:%(name)s - 日志级别:%(levelname)s - 日志信息:%(message)s - 日志路径:%(filename)s - 日志函数%(funcName)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
logger.debug('this is DEBUG message')
logger.info('this is INFO message')
logger.warning('this is WARNING message')
logger.error('this is ERROR message')
logger.critical('this is CRITICAL message')
下图说明了记录器(logging)和处理程序(handler)中的日志事件信息流:
属性方法 | 说明 |
---|---|
setLevel(级) | 将此记录器的阈值设置为level。严重程度低于级别的日志消息将被忽略;具有严重性级别 或更高级别的日志消息将由服务该记录器的任何一个或多个处理程序发出,除非将处理程序的级别设置为比level更高的严重性级别。 |
isEnabledFor(级) | 指示此记录器是否将处理严重性级别的消息。此方法首先检查由设置的模块级别级别 logging.disable(level),然后检查由确定的记录器的有效级别getEffectiveLevel()。 |
getEffectiveLevel() | 指示此记录器的有效级别。如果NOTSET使用设置了其他值 setLevel(),则将其返回。否则,将层次结构朝根遍历,直到NOTSET找到除以外的其他值 ,然后返回该值。返回的值是一个整数,通常为logging.DEBUG,logging.INFO 等等。 |
getChild(后缀) | 返回由后缀确定的记录器,该记录器是该记录器的后代。因此,logging.getLogger(‘abc’).getChild(‘def.ghi’)将返回与相同的记录器logging.getLogger(‘abc.def.ghi’)。这是一种方便的方法,当使用例如__name__ 而不是文字字符串命名父记录器时很有用。 |
addFilter(过滤器) | 将指定的过滤器过滤器添加到此记录器。 |
removeFilter(过滤器) | 从此记录器中删除指定的过滤器过滤器。 |
filter(记录) | 将此记录器的过滤器应用于记录,并True在要处理记录时返回。依次查询过滤器,直到其中一个返回假值为止。如果它们都不返回假值,则记录将被处理(传递给处理程序)。如果返回一个假值,则不会对该记录进行进一步处理。 |
addHandler(hdlr ) | 将指定的处理程序hdlr添加到此记录器。 |
removeHandler(hdlr ) | 从此记录器中删除指定的处理程序hdlr。 |
… | 更多记录器属性及其方法 |
处理器类 | 作用 |
---|---|
StreamHandler | 实例将消息发送到流(类似文件的对象)。 |
FileHandler | 实例将消息发送到磁盘文件。 |
BaseRotatingHandler | 在特定点旋转日志文件的处理程序的基类。它并不意味着要直接实例化。而是使用RotatingFileHandler或 TimedRotatingFileHandler。 |
SocketHandler | 实例将消息发送到TCP / IP套接字。从3.4开始,还支持Unix域套接字。 |
DatagramHandler | DatagramHandler |
SMTPHandler | 实例将消息发送到指定的电子邮件地址。 |
NTEventLogHandler | 实例将消息发送到Windows NT / 2000 / XP事件日志。 |
HTTPHandler | 实例使用GET或POST语义将消息发送到HTTP服务器。 |
QueueHandler | 实例将消息发送到队列,例如在queue或multiprocessing模块中实现的消息。 |
属性方法 | 说明 |
---|---|
setFormatter(fmt ) | Formatter将此处理程序的设置为fmt。 |
addFilter(过滤器) | 将指定的过滤器过滤器添加到此处理程序。 |
removeFilter(过滤器) | 从此处理程序中删除指定的过滤器过滤器。 |
handle(记录) | 根据可能已添加到处理程序的筛选器,有条件地发出指定的日志记录。用获取/释放I / O线程锁包装记录的实际发射。 |
handleError(记录) | 当在emit()调用过程中遇到异常时,应从处理程序中调用此方法。如果模块级属性 raiseExceptions为False,则异常会被静默忽略。这是日志系统最需要的-大多数用户不会关心日志系统中的错误,他们对应用程序错误更感兴趣。但是,您可以根据需要将其替换为自定义处理程序。指定的记录是发生异常时正在处理的记录。(的默认值raiseExceptions是True,因为这在开发过程中是比较有用的)。 |
format(记录) | 对记录进行格式化-如果设置了格式化程序,请使用它。否则,请使用模块的默认格式化程序。 |
emit(记录) | 执行任何操作以实际记录指定的记录记录。此版本旨在由子类实现,因此引发了一个 NotImplementedError。 |
init_(level = NOTSET ) | Handler通过设置实例的级别,将过滤器列表设置为空列表并创建锁(使用createLock())来序列化对I / O机制的访问来初始化实例。 |
createLock() | 初始化线程锁,该线程锁可用于序列化对可能不是线程安全的基础I / O功能的访问。 |
acquire() | 获取使用创建的线程锁createLock()。 |
release() | 释放通过获取的线程锁acquire()。 |
属性 | 说明 |
---|---|
%(asctime)s | LogRecord创建时的可读时间 。默认情况下,格式为“ 2003-07-08 16:49:45,896”(逗号后的数字是时间的毫秒部分)。 |
%(created)f | LogRecord创建的时间(由返回time.time())。 |
%(filename)s | 文件名部分pathname。 |
%(funcName)s | 包含日志记录调用的函数的名称。 |
%(name)s | 用于记录呼叫的记录器的名称。 |
%(levelname)s | 文本日志记录级别消息(‘DEBUG’,‘INFO’,‘WARNING’, ‘ERROR’,‘CRITICAL’)。 |
Levelno | 数字记录级别的消息(DEBUG,INFO, WARNING,ERROR, CRITICAL)。 |
%(thread)d | 线程ID(如果有)。 |
%(threadName)s | 线程名称(如果有)。 |
%(processName)s | 进程ID(如果有)。 |
%(processName)s | 进程名称(如果有)。 |
relativeCreated | 创建LogRecord的时间(以毫秒为单位),相对于加载日志模块的时间。 |
logging.config—记录配置