跨包模块设置日志记录的有效方法

2024-04-08

我有一个包,其中包含多个组件,这些组件将从使用日志记录和输出有用信息中受益匪浅。

我不想做的是为每个文件“设置”正确的日志记录,并在以下位置进行:

import logging
logging.basicConfig(level=DEBUG)
my_function = logging.getLogger("my_function")
my_class = logging.getLogger("my_class")

我尝试了几种方法,其中一种是将样板代码添加到实用程序模块内的类中,并尝试执行如下操作:

from util import setlogging
set_logging()

但即使上面的解决方案对我来说看起来也不干净,并且会导致问题,因为 setLogger 没有__call__方法。我喜欢的是,我的“set_logging”类将从配置文件中读取并具有一些默认值,因此无论我想要什么级别或什么类型的日志记录格式,它都会正确设置它。

有没有办法在我的包中全面初始化正确的日志记录?也许在__init__.py file?

为了尽可能详细,setlogging(现在是一个函数,而不是一个类)如下所示:

def setlogging(config=None):
    if config == None:
        config = config_options() # sets default values
    levels = {
        'debug': DEBUG,
       'info': INFO
        }

    level = levels.get(config['log_level'])
    log_format = config['log_format']
    datefmt = config['log_datefmt']

    basicConfig(
        level   = level,
        format  = log_format,
        datefmt = datefmt)

如果您希望包的各个模块中的所有代码都使用相同的记录器对象,您只需(使该记录器可用 - 见下文 - 并)调用

mylogger.warning("Attenzione!")

或类似的,而不是logging.warning&C。所以,问题就简化为制作一个mylogger整个包的对象,并使其在包中的整个模块中可用。 (或者,您可以使用命名记录器,其名称以包名开头,后跟一个点,但是虽然这是logging包功能,我个人从未发现它是一种自然的操作方式)。

所以,你的util.setlogging函数后面可以简单地跟上,比如说,

mylogger = logging.getLogger(package_name)

以及每个导入的模块util可以简单地使用

util.mylogger.warning('Watch out!')

等等。在我看来,这似乎是最简单的方法,只要包中的所有代码都应该以相同的方式记录的概念适用即可。

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

跨包模块设置日志记录的有效方法 的相关文章

  • python中unicode字符串到ascii字符串的近似转换

    不知道这是否微不足道 但我需要将 unicode 字符串转换为 ascii 字符串 并且我不希望周围有所有这些转义字符 我的意思是 是否有可能 近似 转换为一些非常相似的 ascii 字符 例如 Gavin O Connor 转换为 Gav
  • Python Numpy TypeError:输入类型不支持 ufunc 'isfinite'

    这是我的代码 def topK dataMat sensitivity meanVals np mean dataMat axis 0 meanRemoved dataMat meanVals covMat np cov meanRemov
  • 在 Windows 上使用 Python 打开设备句柄

    我正在尝试使用 Giveio sys 驱动程序 该驱动程序需要先打开一个 文件 然后才能访问受保护的内存 我正在查看 WinAVR AVRdude 中的 C 示例 它使用以下语法 define DRIVERNAME giveio HANDL
  • 为什么 Dash 在上传文件时会出现解析错误?

    上传 Excel 或 CSV 会导致错误 我遵循了 Dash 演示 但是当我尝试扩展它来执行绘图之类的操作时 它就不起作用了 我不想只显示一张桌子 Dash Table 函数已更新 因此之前使用 Dash Table Experiments
  • 使用 Python 连接从 FTP 检索文件

    我构建了这个简单的工具来暴力破解并连接到 ftp 服务器 import socket import ftplib from ftplib import FTP port 21 ip 192 168 1 108 file1 passwords
  • 在 AWS Elastic Beanstalk 中部署 Flask 应用程序

    当我部署 Flask 应用程序时 它显示成功 但是当我检索日志时 我看到错误 找不到 Flask 我的需求文件中有烧瓶 任何帮助 Sat Jan 11 06 51 50 503908 2020 error pid 3393 remote 1
  • 如何将当前日期分配给 odoo v8 中的日期字段?

    我想将当前日期分配给以下代码中的日期字段 start date calendar obj create cr uid name rec res act ion user id rec res asgnd to id start date l
  • 如何从 python 脚本更改 python 文件中的变量值

    我目前有一个 python 文件 其中包含一堆带有值的全局变量 我想从一个单独的 python 脚本永久更改这些值 我尝试过 setattr 等 但似乎不起作用 有没有办法做到这一点 简短的回答是 不 不值得这么麻烦 听起来您正在尝试创建一
  • 如何在 PyCharm 中启用 flake8 的自动代码格式化

    我使用 Tox 运行单元测试 并使用 flake8 命令检查代码格式错误 每次我在 PyCharm 中编码时 我都会运行 tox 然后意识到我有一堆烦人的格式错误 我必须返回并手动修复 我希望 PyCharm 自动格式化代码 根据 flak
  • 模拟导入失败

    我该如何制作import pkg失败moduleA py 我可以打补丁pkg如果从中导入某些内容则会失败 否则不会失败 test py import os import moduleA from unittest mock import p
  • 如何使用增量值向 Pyspark 中的 DataFrame 添加列?

    我有一个名为 df 的 DataFrame 如下所示 Atr1 Atr2 Atr3 A A A B A A C A A 我想向其中添加一个具有增量值的新列并获取以下更新的 DataFrame Atr1 Atr2 Atr3
  • 在 Django 1.9 中使用信号

    在 Django 1 8 中 我能够使用信号执行以下操作 一切顺利 init py from signals import 信号 py receiver pre save sender Comment def process hashtag
  • 有没有更快的方法将数字转换为名称?

    以下代码定义了映射到数字的名称序列 它的设计目的是获取一个号码并检索一个特定的名称 该类通过确保名称存在于其缓存中来进行操作 然后通过索引到其缓存中来返回名称 问题在这 如何在不存储缓存的情况下根据数字计算出名称 该名称可以被认为是一个以
  • 为什么删除 DataFrame 的列或部分会增加内存使用量,以及如何确保对未使用的 DataFrame 切片进行垃圾回收

    处理大型 DataFrame 时 您需要小心内存使用情况 例如 您可能想要分块下载大数据 处理这些块 然后从内存中删除所有不必要的部分 我找不到任何有关处理垃圾收集的最佳程序的资源pandas 但我尝试了以下方法并得到了令人惊讶的结果 im
  • 了解 Tensorflow 中的 while 循环

    我正在使用用于 Tensorflow 的 Python API https www tensorflow org api docs python 我正在努力实施罗森布罗克函数 https www sfu ca ssurjano rosen
  • Kivy:滚动缩放

    有没有办法在桌面 kivy 应用程序上放大图像 例如使用鼠标滚轮缩放 这里似乎讨论过 https github com kivy kivy issues 3563 https github com kivy kivy issues 3563
  • 将数值和分类数据混合到具有密集层的 keras 序列模型中

    我在 Pandas 数据框中有一个训练集 我将此数据框传递到model fit with df values 以下是有关 df 的一些信息 df values shape 981 5 df values 0 array 163 0 6 83
  • launchd执行python脚本,但导入失败

    我使用 appscript 编写了一个 python 脚本来跟踪我当前活动的窗口 我通过 launchd 运行它 但是当我这样做时 它无法导入 appscript 我已经在 launchd 的 plist 中设置了 PYTHONPATH 但
  • jupyter run magic 将参数传递给笔记本

    当您在第一个 jupyter 笔记本 first ipynb 中时 您可以执行第二个 但如何传递参数呢 假设第二个有以下内容 xx 10 您可以从第一个调用第二个 如下所示 run second ipynb xx will print 10
  • 交响二阶颂歌

    我有一个简单的二阶 ODE 的齐次解 当我尝试使用 Sympy 求解初始值时 它返回相同的解 它应该替代 y 0 和 y 0 并产生一个没有常数的解 但事实并非如此 这是建立方程的代码 它是一个弹簧平衡方程 k 弹簧常数 m 质量 我在其他

随机推荐

  • 混合命名和未命名函数参数

    我有这个功能来验证 JWT 令牌 不是中间件 它说 package main import net http log fmt github com dgrijalva jwt go func ValidateToken w http Res
  • 如何选中反应测试库中的复选框?

    我似乎找不到太多 任何关于我想要实现的这个非常简单的事情的文档 我有一个下拉菜单display none 当我单击复选框时 它会变成display block我想要断言的是 当我单击复选框时 它会显示下拉列表 expect getByLab
  • SQL Server 2016 枢轴

    我有一个问题sql MS SQL 2016 和pivot功能 首先让我解释一下数据结构 示例tbl Preise 有多种价格 Preis 对于每个区域 Gebiet von Gebiet bis 在继电器 StaffelNr 所有连接到相同
  • Android - 检测长按结束

    我正在开发用户需要长时间按住按钮的应用程序 如何检测用户完成按下或移动触摸位置的时刻 Thanks 我认为最好的选择是对该按钮使用 onLongClickListener 和 onTouchListener 的组合 您需要在触摸侦听器上捕获
  • Rails 4 模型子文件夹

    我在 app models request book 文件夹中创建了模型 但 Book Request Status table name 返回表名称 statuses book request statuses 是正确的表名称 如何获得正
  • 随着扩展方法的出现,抽象类的吸引力是否降低了?

    NET 中扩展方法的一个有趣的方面是您可以将它们应用到接口 对我来说 我可以在接口附近定义功能 而无需定义使程序集混乱的抽象类 这似乎很好 我知道抽象类并没有过时 但是您对在代码中利用这种副作用有何看法 Example public sta
  • 在 Qt 中将多个小部件合并为一个

    我反复使用一对QComboBox and QListWidget在一个项目中 它们的交互是高度耦合的 当在组合框中选择一个项目时 列表会以某种方式进行过滤 我在多个对话框实现中复制粘贴这两个小部件之间的所有信号和插槽连接 我认为这不是一个好
  • 什么是杂注头?缓存页面..和 IE

    因此 我在 php 中发送标头来缓存我的页面 这也集成到我们的 CDN contendo akamai 中 我总是使用这个 pragma cache header 我见过各种例子也使用它 然而 我刚刚检查了 fiddler 来测试我们开发的
  • PHP $_FILES MIME 类型返回 null

    现在我正在尝试编写一个脚本 该脚本仅接受某些音频文件上传到服务器 但是 某些 MIME 类型将返回为 null 这是一些代码片段 PHP allowedExt array audio mp4a latm if isset POST prin
  • 项目同时使用MySQL和PostgreSQL时从JsonStringType切换为JsonBinaryType

    当需要从 PostgreSQL 切换到 MariaDB MySql 时 我遇到了 json 列的问题 我使用 Spring Boot JPA Hibernate hibernate types 52 我想要映射的表是这样的 CREATE T
  • BreakIterator 在 Android 中如何工作?

    我正在 Android 中制作自己的文本处理器 蒙古语的自定义垂直脚本 TextView 我以为我必须自己找到所有换行位置 以便我可以实现换行 但后来我发现BreakIterator https developer android com
  • 如何根据另一个字段的值禁止 TFS 要求工作项中的状态从“建议”更改为“活动”?

    I ve added department approvals to the standard CMMI Template Requirement work item I d like to limit the System State f
  • iOS 通知服务扩展会从设备中删除附加文件吗?

    我遇到了一个奇怪的问题 iOS 通知服务扩展将从设备中删除附件 我使用 SDWebImage 来显示和缓存图像 并实现了通知服务扩展以在通知警报视图中显示图像 就我而言 图像已在本地缓存 然后 我单击主页按钮 我的应用程序在后台运行 应用程
  • 如何将远程 Git 存储库添加到 Ubuntu 服务器?

    我在我的桌面计算机 Windows 7 上创建了一个 Git 存储库 git init git add
  • 如何运行 Flutter 脚本

    我正在尝试对 flutter 库进行一些基准测试 但是我不知道如何运行需要 flutter 库的脚本 我能够做到这一点的唯一方法是将其作为测试代码运行 但是我没有找到在测试模式下禁用断言的方法 Works flutter test mySc
  • 如何实现 Gmail 风格的标签选择器?

    实现 类似 Gmail 标签邮件界面的最简单方法是什么 有没有 JavaScript 库有这样的小部件 http img294 imageshack us img294 7097 36698396 png http img294 image
  • 在没有游标的情况下合并单个 SQL 表中的数据

    我有一个包含 ID 列的表和另一个包含数字的列 一个ID可以有多个号码 例如 ID Number 1 25 1 26 1 30 1 24 2 4 2 8 2 5 现在根据这些数据 在一个新表中 我想要这个 ID Low High 1 24
  • 在没有按钮连接的情况下以编程方式执行 Segue?

    我的故事板中有两个视图控制器 我需要从视图 1 推送到视图 2 我需要在不直接从故事板中的按钮连接转场的情况下执行此操作 我需要以编程方式执行此操作 我怎么能够 Thanks 当您单击按钮时调用 self performSegueWithI
  • VBScript 宏 getParentFolder 名称

    我正在尝试创建一个 vbscript 宏 它将获取存储宏的文件夹位置并将输出文件创建到同一文件夹中 我正在使用下面的代码 但它没有获得正确的位置 Set obj1FSO CreateObject Scripting FileSystemOb
  • 跨包模块设置日志记录的有效方法

    我有一个包 其中包含多个组件 这些组件将从使用日志记录和输出有用信息中受益匪浅 我不想做的是为每个文件 设置 正确的日志记录 并在以下位置进行 import logging logging basicConfig level DEBUG m