使用记录器对象而不是使用日志记录有什么优点?

2023-12-23

使用 Python 和logging库,您可以通过字典配置日志记录log_config and

logging.config.dictConfig(log_config)

您可以通过以下方式登录logging.info或创建一个记录器对象并使用它。拥有记录器对象有什么好处?


记录器根据其名称(使用“dotted.path”表示法)形成层次结构,根记录器位于顶部。创建记录器的规范方法是每个模块都有一个记录器,根据模块的名称命名__name__属性,因此如果您有一个名为“mylib”的包,其中包含模块“utils”、“core”和“api”,那么您将拥有记录器“mylib”、“mylib.utils”、“mylib.core”和“mylib.api” ”,其中最后三个是“mylib”的子级(当然是根记录器的子级)。

由此,您可以仅配置根记录器,或者更具体地配置“mylib”记录器,甚至更具体地配置“mylib.api”(请注意,默认情况下记录器会传播到其父记录器)。如果你只使用logging直接在所有包中,您将无法自定义每个包/模块的子记录器。

这里的要点是记录器调用应该与记录器配置分离 - 库代码定义和调用记录器,配置是使用库的应用程序的职责。显然,原因是库作者无法知道哪些应用程序将使用库代码,也不知道应用程序的作者希望如何配置他的记录器。该系统为应用程序的作者(或系统管理员或负责配置/部署应用程序的人员)提供了对记录器配置的全面、细粒度的控制。如果您的所有库代码仅使用根记录器,那么应​​用程序作者/管理员/用户不能对每个库/模块有不同的设置,并且他(她)会讨厌您如此侵入(我们不谈论他(她)如何如果你的库试图以任何方式真正搞乱记录器配置,你会感觉到)。

使长话短说:坚持理智的约定,使用logger = logging.getLogger(__name__)在你的模块中,做not尝试在您的库代码中配置日志记录,您的库用户会很高兴。

编辑:正如您在评论中提到的,如果应用程序配置日志记录,则在模块级别声明记录器可能会导致问题after导入你的库and不设置disable_existing_loggers为假。就我而言,应用程序的作者有责任在导入其他内容之前配置日志记录和/或设置disable_existing_loggers为假。无论如何,首先配置日志记录是一个好主意,因为它将允许库代码在导入时记录最终问题......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用记录器对象而不是使用日志记录有什么优点? 的相关文章

随机推荐

  • 字段只读和组属性

    我希望在 Openerp 6 1 视图中将字段设置为只读 我希望该字段对于除特定组之外的所有组都是只读的 假设经理应该能够编辑它 而其他人应该只能查看 我不清楚如何在视图中做到这一点 请建议 谢谢 你只需创建一个功能域 http doc o
  • 在渲染组件之前运行 useEffect 钩子

    我在 App js 文件中使用了一个 useEffect 挂钩 它将数据放入我需要在我的应用程序中使用的 redux 存储中 但它在 useEffect 运行之前渲染 因此数据未定义 useEffect 然后正确运行 我需要 useEffe
  • 在 bootstrap-datetimepicker 中设置默认时间

    我想设置默认时间这个日期时间选择器 http tarruda github io bootstrap datetimepicker as 00 01当前日期 以前有人尝试过吗 经历了一段艰难的时期 看起来很简单 startdatetime
  • Form2上Form1的C#访问方法

    我的项目中有 2 个表格 Form1 是主窗体 在那里 我有一个用于打开 Form2 的按钮 一个 ListView 和一个调用 url 并向 ListView 提供从 url 获取的数据的方法 Form2 有一个 URL 文本框和一个 确
  • 使用 tweepy 的流式 api 仅返回倒数第二条推文,而不返回最后一条推文

    我不仅对 python 很陌生 而且对编程都很陌生 所以我非常感谢你的帮助 我正在尝试使用 Tweepy 过滤检测来自 twitter 流 API 的所有推文 我已按用户 ID 进行过滤 并确认推文正在被实时收集 HOWEVER 看来只有最
  • Rails 6 Zeitwerk“弃用警告:初始化自动加载常量...”,但我不知道在哪里?

    我发誓我已经阅读了这些文档 并且我认为我对这些原理有了基本的了解 但我一生都无法弄清楚我在哪里不恰当地加载了这些常量 我正在升级一个最初是 Rails 5 2 的应用程序 当我运行 RSpec 服务器 本地控制台等时 我收到此警告 DEPR
  • 如何从 PySide QAbstractItemModel 子类向 QML ListView 提供数据?

    我正在 PySide 中编写一个具有 QML UI 的应用程序 我在 Python 中对 QAbstractListModel 进行了子类化 class MyModel QtCore QAbstractListModel def init
  • VBA过滤和发送电子邮件

    我正在尝试自动化我们发送给各个堆栈持有者的电子邮件过程 我想根据公司代码过滤D列并将电子邮件发送给O列中列出的人员 电子邮件不应重复 并且还需要包含抄送 不重复 下面是正在尝试的VBA 但无法包含TO和CC Sub Send Row Or
  • Python 2 与 Python 3 - 三个参数的映射行为有何差异?

    以下代码在 Python 2 和 Python 3 中的行为有所不同 all map lambda x y x 1 2 1 2 3 Python 2 给出False而Python 3给出了True The 文档 https docs pyt
  • jquery.inArray() 与 Object.hasOwnProperty() 之间的性能差异?

    我有一种情况 我可以选择将字符串键的集合实现为对象 each objects function key object collection key doesn t matter 或一个数组 each objects function key
  • 处理sql异常的策略应该是什么?

    我有一个多层应用程序 DAL gt BAL gt 业务网关 gt UI 如果DAL发生外键或唯一约束异常 我们应该如何识别这是哪个异常以及向用户显示什么错误消息 我们应该使用错误号来识别这一点吗 第二个问题 我们应该如何将此错误传播给 UI
  • 可跨文本对于 TextView 来说太宽

    我有一个TextView与字体sans serif light 为了链接里面的一些单词 我将文本设置为Spannable像这样 final Spannable text new SpannableString textView getTex
  • 在 Windows 中运行 JavaScript

    我认为对于一些只运行几个命令的简单测试 我会尝试使用一些 JavaScript 并从 Windows XP 中的命令行运行它 因此 为了进行快速测试 我创建了一个脚本 alert Hello World 然后尝试运行它 D gt Cscri
  • 在 Rails 3 中创建 SEO 友好的 URL

    我目前的网址如下所示 things category id 6 country id 17 我希望 URL 看起来像这样 printer cartridges united kingdom Rails 3 有没有一种方法 无需对路由器中的所
  • JavaScript/HTML:如何将用户输入显示到 html 正文中?

    这是我的 html 表单
  • 如何使用 awk 打印字段与特定字符串匹配的行?

    I have 1 LINUX param1 value1 2 LINUXparam2 value2 3 SOLARIS param3 value3 4 SOLARIS param4 value4 我需要 awk 打印其中的所有行 2 is
  • 如何使用 Node.js 在服务器端管理多个 JS 文件

    我正在使用 Node js 开发一个项目 服务器端代码变得足够大 我想将其拆分为多个文件 看来这已经在客户端完成多年了 开发是通过插入一个来完成的script每个文件的标签并且仅用于分发 类似于 Make 用于将所有内容放在一起 我意识到连
  • 适用于 Windows 的 Helgrind?

    Helgrind 是一个 Valgrind 工具 用于 检测 C 中的同步错误 使用的 C 和 Fortran 程序 POSIX pthreads 线程原语 有人知道 windows 下有类似的工具吗 经过一番谷歌搜索后 我没有找到任何东西
  • 更改 my.cf 后 MySQL 将无法启动

    我正在开发一个网站 但收到以下 MySQL 错误 这与 sql mode only full group by 不兼容 我寻找答案 我意识到我必须更改 MySQL 的 sql mode 所以我将以下行添加到 etc mysql my cnf
  • 使用记录器对象而不是使用日志记录有什么优点?

    使用 Python 和logging库 您可以通过字典配置日志记录log config and logging config dictConfig log config 您可以通过以下方式登录logging info或创建一个记录器对象并使