天天看点

python3从零学习-5.6.4、日志标准库logging源代码: Lib/logging/__init__.py  

源代码: Lib/logging/__init__.py

class logging.Logger

    propagate         如果这个属性为真,记录到这个记录器的事件将会传递给这个高级别管理器的记录器(原型),此外任何关联到这个记录器的管理器。消息会直接传递给原型记录器的管理器 - 既不是这个原型记录器的级别也不是过滤器是在考虑的问题。         如果等于假,记录消息将不会传递给这个原型记录器的管理器。         构造器将这个属性初始化为 True。         setLevel(level)         给 logger 设置阈值为 level 。日志等级小于 level 会被忽略。严重性为 level 或更高的日志消息将由该 logger 的任何一个或多个 handler 发出,除非将处理程序的级别设置为比 level 更高的级别。         创建一个 logger 时,设置级别为 NOTSET (当 logger 是根 logger 时,将处理所有消息;当 logger 是非根 logger 时,所有消息会委派给父级)。注意根 logger 创建时使用的是 WARNING 级别。         委派给父级的意思是如果一个记录器的级别设置为NOTSET,遍历其祖先记录器链,直到找到另一个NOTSET级别的祖先或到达根为止。         如果发现某个父级的级别 不是NOTSET ,那么该父级的级别将被视为发起搜索的记录器的有效级别,并用于确定如何处理日志事件。         如果到达根 logger ,并且其级别为NOTSET,则将处理所有消息。否则,将使用根记录器的级别作为有效级别。         isEnabledFor(lvl)         Indicates if a message of severity lvl would be processed by this logger. This method checks first the module-level level set by logging.disable(lvl) and then the logger’s effective level as determined by getEffectiveLevel().         getEffectiveLevel()         指示此记录器的有效级别。如果通过 setLevel() 设置了除 NOTSET 以外的值,则返回该值。否则,将层次结构遍历到根,直到找到除 NOTSET 以外的其他值,然后返回该值。返回的值是一个整数,通常为 logging.DEBUG、 logging.INFO 等等。         getChild(suffix)         返回由后缀确定的,是该记录器的后代的记录器。 因此,logging.getLogger('abc').getChild('def.ghi') 与 logging.getLogger('abc.def.ghi') 将返回相同的记录器。 这是一个便捷方法,当使用如 __name__ 而不是字符串字面值命名父记录器时很有用。         debug(msg, *args, **kwargs)         Logs a message with level DEBUG on this logger. The msg is the message format string, and the args are the arguments which are merged into msg using the string formatting operator. (Note that this means that you can use keywords in the format string, together with a single dictionary argument.)         info(msg, *args, **kwargs)         在此记录器上记录 INFO 级别的消息。参数解释同 debug()。         warning(msg, *args, **kwargs)         在此记录器上记录 WARNING 级别的消息。参数解释同 debug()。         error(msg, *args, **kwargs)         在此记录器上记录 ERROR 级别的消息。参数解释同 debug()。         critical(msg, *args, **kwargs)         在此记录器上记录 CRITICAL 级别的消息。参数解释同 debug()。         log(lvl, msg, *args, **kwargs)         Logs a message with integer level lvl on this logger. The other arguments are interpreted as for debug().         exception(msg, *args, **kwargs)         在此记录器上记录 ERROR 级别的消息。参数解释同 debug()。异常信息将添加到日志消息中。仅应从异常处理程序中调用此方法。         addFilter(filter)         将指定的过滤器 filter 添加到此记录器。         removeFilter(filter)         从此记录器中删除指定的处理程序 filter。         filter(record)         Applies this logger’s filters to the record and returns a true value if the record is to be processed. The filters are consulted in turn, until one of them returns a false value. If none of them return a false value, the record will be processed (passed to handlers). If one returns a false value, no further processing of the record occurs.         addHandler(hdlr)         将指定的处理程序 hdlr 添加到此记录器。         removeHandler(hdlr)         从此记录器中删除指定的处理器 hdlr。         findCaller(stack_info=False)         查找调用源的文件名和行号,以 文件名,行号,函数名称和堆栈信息 4元素元组的形式返回。堆栈信息将返回 None``除非 *stack_info* 为 ``True。         handle(record)         通过将记录传递给与此记录器及其祖先关联的所有处理器来处理(直到某个 propagate 值为 false)。此方法用于从套接字接收的未序列化的以及在本地创建的记录。使用 filter() 进行记录程序级别过滤。         makeRecord(name, lvl, fn, lno, msg, args, exc_info, func=None, extra=None, sinfo=None)         这是一种工厂方法,可以在子类中对其进行重写以创建专门的 LogRecord 实例。         hasHandlers()         检查此记录器是否配置了任何处理器。通过在此记录器及其记录器层次结构中的父级中查找处理器完成此操作。如果找到处理器则返回 True,否则返回``False``。只要找到 “propagate” 属性设置为 false的记录器,该方法就会停止搜索层次结构 —— 其将是最后一个检查处理器是否存在的记录器。    

日志级别

日志记录级别的数值在下表中给出。如果你想要定义自己的级别,并且需要它们具有相对于预定义级别的特定值,那么这些内容可能是你感兴趣的。如果你定义具有相同数值的级别,它将覆盖预定义的值; 预定义的名称丢失。

级别 数值
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET

处理器对象

Handler 有以下属性和方法。注意不要直接实例化 Handler ;这个类用来派生其他更有用的子类。但是,子类的 __init__() 方法需要调用 Handler.__init__() 。 class logging.Handler     __init__(level=NOTSET)         初始化 Handler 实例时,需要设置它的级别,将过滤列表置为空,并且创建锁(通过 createLock() )来序列化对 I/O 的访问。         createLock()         初始化一个线程锁,用来序列化对底层的 I/O 功能的访问,底层的 I/O 功能可能不是线程安全的。         acquire()         使用 createLock() 获取线程锁。         release()         使用 acquire() 来释放线程锁。         setLevel(level)         给处理器设置阈值为 level 。日志级别小于 level 将被忽略。创建处理器时,日志级别被设置为 NOTSET (所有的消息都会被处理)。         setFormatter(fmt)         将此处理器的 Formatter 设置为 fmt。         addFilter(filter)         将指定的过滤器 filter 添加到此处理器。         removeFilter(filter)         从此处理器中删除指定的过滤器 filter 。         filter(record)         Applies this handler’s filters to the record and returns a true value if the record is to be processed.          The filters are consulted in turn, until one of them returns a false value. If none of them return a false value, the record will be emitted.          If one returns a false value, the handler will not emit the record.         flush()         确保所有日志记录从缓存输出。此版本不执行任何操作,并且应由子类实现。         close()         整理处理器使用的所有资源。此版本不输出,但从内部处理器列表中删除处理器,内部处理器在 shutdown() 被调用时关闭 。子类应确保从重写的 close() 方法中调用此方法。         handle(record)         经已添加到处理器的过滤器过滤后,有条件地发出指定的日志记录。用获取/释放 I/O 线程锁包装记录的实际发出行为。         handleError(record)         调用 emit() 期间遇到异常时,应从处理器中调用此方法。如果模块级属性 raiseExceptions 是 False,则异常将被静默忽略。这是大多数情况下日志系统需要的 —— 大多数用户不会关心日志系统中的错误,他们对应用程序错误更感兴趣。但是,你可以根据需要将其替换为自定义处理器。指定的记录是发生异常时正在处理的记录。(raiseExceptions 的默认值是 True,因为这在开发过程中是比较有用的)。         format(record)         如果设置了格式器则用其对记录进行格式化。否则,使用模块的默认格式器。         emit(record)         执行实际记录给定日志记录所需的操作。这个版本应由子类实现,因此这里直接引发 NotImplementedError 异常。