logging

您所在的位置:网站首页 python处理器不支持的 logging

logging

2024-07-04 18:35| 来源: 网络整理| 查看: 265

在此记录器上记录 DEBUG 级别的消息。 msg 是消息格式字符串,而 args 是用于字符串格式化操作合并到 msg 的参数。(请注意,这意味着您可以在格式字符串中使用关键字以及单个字典参数。)当未提供 args 时,不会对 msg 执行 % 格式化操作。

在 kwargs 中会检查四个关键字参数: exc_info ,stack_info ,stacklevel 和 extra 。

如果 exc_info 的求值结果不为 false ,则它将异常信息添加到日志消息中。如果提供了一个异常元组(按照 sys.exc_info() 返回的格式)或一个异常实例,则它将被使用;否则,调用 sys.exc_info() 以获取异常信息。

第二个可选关键字参数是 stack_info,默认为 False。如果为 True,则将堆栈信息添加到日志消息中,包括实际的日志调用。请注意,这与通过指定 exc_info 显示的堆栈信息不同:前者是从堆栈底部到当前线程中的日志记录调用的堆栈帧,而后者是在搜索异常处理程序时,跟踪异常而打开的堆栈帧的信息。

您可以独立于 exc_info 来指定 stack_info,例如,即使在未引发任何异常的情况下,也可以显示如何到达代码中的特定点。堆栈帧在标题行之后打印:

Stack (most recent call last):

这模仿了显示异常帧时所使用的 Traceback (most recent call last): 。

第三个可选关键字参数是 stacklevel ,默认为 1 。如果大于 1 ,则在为日志记录事件创建的 LogRecord 中计算行号和函数名时,将跳过相应数量的堆栈帧。可以在记录帮助器时使用它,以便记录的函数名称,文件名和行号不是帮助器的函数/方法的信息,而是其调用方的信息。此参数是 warnings 模块中的同名等效参数。

第四个关键字参数是 extra ,传递一个字典,该字典用于填充为日志记录事件创建的、带有用户自定义属性的 LogRecord 中的 __dict__ 。然后可以按照需求使用这些自定义属性。例如,可以将它们合并到已记录的消息中:

FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) d = {'clientip': '192.168.0.1', 'user': 'fbloggs'} logger = logging.getLogger('tcpserver') logger.warning('Protocol problem: %s', 'connection reset', extra=d)

输出类似于

2006-02-08 22:20:02,165 192.168.0.1 fbloggs Protocol problem: connection reset

在The keys in the dictionary passed in extra 传入的字典的键不应与日志系统所使用的键相冲突。 (请参阅 LogRecord 属性 一节了解有关日志系统所使用的键的更多信息。)

如果在已记录的消息中使用这些属性,则需要格外小心。例如,在上面的示例中,Formatter 已设置了格式字符串,其在 LogRecord 的属性字典中键值为 “clientip” 和 “user”。如果缺少这些内容,则将不会记录该消息,因为会引发字符串格式化异常。因此,在这种情况下,您始终需要使用 extra 字典传递这些键。

尽管这可能很烦人,但此功能旨在用于特殊情况,例如在多个上下文中执行相同代码的多线程服务器,并且出现的有趣条件取决于此上下文(例如在上面的示例中就是远程客户端IP地址和已验证用户名)。在这种情况下,很可能将专门的 Formatter 与特定的 Handler 一起使用。

如果没有处理器附加到这个记录器(或者它的任何父辈记录器,考虑到相关的 Logger.propagate 属性),消息将被发送到设置在 lastResort 的处理器。

在 3.2 版本发生变更: 增加了 stack_info 参数。

在 3.5 版本发生变更: exc_info 参数现在可以接受异常实例。

在 3.8 版本发生变更: 增加了 stacklevel 参数。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3