当前位置: 首页 > 编程笔记 >

Python如何给函数库增加日志功能

施茂
2023-03-14
本文向大家介绍Python如何给函数库增加日志功能,包括了Python如何给函数库增加日志功能的使用技巧和注意事项,需要的朋友参考一下

问题

你想给某个函数库增加日志功能,但是又不能影响到那些不使用日志功能的程序。

解决方案

对于想要执行日志操作的函数库而已,你应该创建一个专属的 logger 对象,并且像下面这样初始化配置:

# somelib.py

import logging
log = logging.getLogger(__name__)
log.addHandler(logging.NullHandler())

# Example function (for testing)
def func():
  log.critical('A Critical Error!')
  log.debug('A debug message')

使用这个配置,默认情况下不会打印日志。例如:

>>> import somelib
>>> somelib.func()
>>>

不过,如果配置过日志系统,那么日志消息打印就开始生效,例如:

>>> import logging
>>> logging.basicConfig()
>>> somelib.func()
CRITICAL:somelib:A Critical Error!
>>>

讨论

通常来讲,你不应该在函数库代码中自己配置日志系统,或者是已经假定有个已经存在的日志配置了。

调用 getLogger(__name__) 创建一个和调用模块同名的logger模块。 由于模块都是唯一的,因此创建的logger也将是唯一的。

log.addHandler(logging.NullHandler()) 操作将一个空处理器绑定到刚刚已经创建好的logger对象上。 一个空处理器默认会忽略调用所有的日志消息。 因此,如果使用该函数库的时候还没有配置日志,那么将不会有消息或警告出现。

还有一点就是对于各个函数库的日志配置可以是相互独立的,不影响其他库的日志配置。 例如,对于如下的代码:

>>> import logging
>>> logging.basicConfig(level=logging.ERROR)

>>> import somelib
>>> somelib.func()
CRITICAL:somelib:A Critical Error!

>>> # Change the logging level for 'somelib' only
>>> logging.getLogger('somelib').level=logging.DEBUG
>>> somelib.func()
CRITICAL:somelib:A Critical Error!
DEBUG:somelib:A debug message
>>>

在这里,根日志被配置成仅仅输出ERROR或更高级别的消息。 不过 ,somelib 的日志级别被单独配置成可以输出debug级别的消息,它的优先级比全局配置高。 像这样更改单独模块的日志配置对于调试来讲是很方便的, 因为你无需去更改任何的全局日志配置——只需要修改你想要更多输出的模块的日志等级。

Logging HOWTO 详细介绍了如何配置日志模块和其他有用技巧,可以参阅下。

以上就是Python如何给函数库增加日志功能的详细内容,更多关于Python给函数库增加日志功能的资料请关注小牛知识库其它相关文章!

 类似资料:
  • 问题 你想给某个函数库增加日志功能,但是又不能影响到那些不使用日志功能的程序。 解决方案 对于想要执行日志操作的函数库而已,你应该创建一个专属的 logger 对象,并且像下面这样初始化配置: # somelib.py import logging log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) #

  • 问题 你希望在脚本和程序中将诊断信息写入日志文件。 解决方案 打印日志最简单方式是使用 logging 模块。例如: import logging def main(): # Configure the logging system logging.basicConfig( filename='app.log', level=logging.ERR

  • 问题内容: 我正在寻找将给定日期增加工作日数的功能。 假期表 包含假期。另外,星期六和星期日均为非营业日。 我试图创建功能 但是它有时返回不正确的结果: 返回2018-12-10, 但正确的结果是2018-12-11 如何在Postgres 9.1+中创建这样的功能? 问题答案: 关键是生成一系列工作日,并用以下编号对它们进行编号: 测试查询的结果似乎正确: 或者,您可以在循环中找到日期:

  • 任何帮助或暗示将非常感谢!! 我的SpringBoot应用程序只记录了1天。我要它记录超过30天。 application.yml: 文件:logs/test.log模式:控制台:“%d{dd-MM-yyyy hh:mm:ss.sss}[%thread]%-5level%logger{36}.%m-%msg%n”文件:“%d{dd-MM-yyyy hh:mm:ss.sss}[%thread]%-5

  • 问题 你写好了一个函数,然后想为这个函数的参数增加一些额外的信息,这样的话其他使用者就能清楚的知道这个函数应该怎么使用。 解决方案 使用函数参数注解是一个很好的办法,它能提示程序员应该怎样正确使用这个函数。 例如,下面有一个被注解了的函数: def add(x:int, y:int) -> int: return x + y python解释器不会对这些注解添加任何的语义。它们不会被类型检

  • 本文向大家介绍Python程序中的日志功能,包括了Python程序中的日志功能的使用技巧和注意事项,需要的朋友参考一下 注意-如果将负数传递给方法,则将出现ValueError。 示例 让我们看一些例子。 输出结果 如果运行上述程序,将得到以下结果。 您可以在上述程序中指定所需的任何基值。让我们看看没有任何基本值的相同示例。默认基值为e。 示例 输出结果 如果运行上面的代码,您将得到以下结果。 示