在 Python 中记录为调用者模块

2023-11-29

我有以下应用程序结构:

./utils.py
def do_something(logger=None):
    if not logger:
        logger = logging.getLogger(__name__)

    print('hello')
    logger.debug('test')

./one.py
from utils import do_something
logger = logging.getLogger(__name__)
do_something(logger=logger)

./two.py
from utils import do_something
logger = logging.getLogger(__name__)
do_something(logger=logger)

现在,运行该程序,日志输出将显示正在使用这些函数的各个模块的名称(one and two) 而不是utils。然后,我使用此信息(记录器的名称)来过滤消息。

有没有办法做到这一点,而不必将记录器作为参数传递?我是否必须基本上内省调用者函数并基于此初始化记录器?当整个代码库都使用一个函数但记录器应该是调用该函数的记录器时,这种类型的配方的常见解决方案是什么?


多变的logger是全局的,可以从内部访问do_something()像这样的函数:

logger = logging.getLogger(__name__)
def do_something():
    x = logger

仔细阅读后:

当一个功能时,这种类型的配方的常见解决方案是什么 在整个代码库中使用,但记录器应该是那些 调用函数?

In 简单的英语将会:

如何访问全局变量logger来自导入的函数do_something()?

我的结论是,没有别的办法了!
对于这种特殊情况,您必须传递 logger 作为参数。

from utils import do_something
logger = logging.getLogger(__name__)

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

在 Python 中记录为调用者模块 的相关文章

随机推荐

  • SpringMVC url 重写与 tuckey UrlRewriteFilter

    如何在 Spring MVC 中重写 url塔基的 UrlRewriteFilter像这样 From http localhost 8080 demo api do method getUser uid 1001 to http local
  • 单元测试自定义 OnRender-Method

    我有一个自定义控件MyControl它继承自Canvas并且里面有自己的逻辑OnRender 方法 它应该在绘图上下文中绘制一些矩形和文本 public class MyControl Canvas protected override v
  • PHP:如何填充数组中的目录结构

    我正在开发一个管理面板 显示服务器上特定位置的目录结构 我有一个递归 php 函数 可以迭代每个文件和文件夹 我不明白的是如何将此目录结构存储在 php 关联数组中 如下所示 array foldername1 0 file if the
  • 为什么这一点很明确:两者都在全球范围内行动?

    Issue 据我所知 清除浮动主要适用于父项 但是我的模板在帖子缩略图之后存在一个问题 其中clear both作用于整个内容包装器 如果不清除浮动 细线将粘在缩略图右侧的文本上 我想要做的是将线置于缩略图或文本下方 45px 处 取决于较
  • GLSL 自旋锁永不终止

    我正在尝试实现一个 GLSL 自旋锁 以便能够实现单通道深度剥离 我遇到了麻烦 因为锁定纹理使用的示例很少 我必须承认 我真的不知道自己在做什么 所以为了安全起见 我描述的上下文可能比必要的更多 我编写了一个片段程序 它实际上什么也不做 v
  • 获取地图区域的位置(html)?

    这可能吗 我正在尝试查找元素的 x 和 y 坐标与浏览器相关 var position this position x position left y position right 不起作用 有什么办法可以做到这一点吗 http adams
  • 0和1数量相同的二进制数

    当我解决的时候欧拉项目问题 15我意识到它可以通过从开始到结束的路线的组合方式来解决 生成的路由始终具有相同大小的右或下选择 或 0 和 1 并且右路由始终具有相同数量的 0 和 1 因此 二进制字中具有相同数量 0 和 1 的数字的数量为
  • 如何将域名指向 heroku 应用程序

    虽然我已经在 VPS 上完成了此操作 但我从未为 heroku 应用程序做过此操作 现在我必须为一家相当大的公司执行此操作 所以我真的想要一个简单的要点列表来说明如何执行此操作 我读了这些说明 我还是有点不清楚它们到底是什么意思 再说一遍
  • 正则表达式匹配第二次出现字符后的相邻数字

    陷入以下问题 我有一个字符串 ABC 123 456XX 我想使用正则表达式提取第二个句点之后的 3 个数字字符 真的很挣扎 并且会感激任何新的见解 这是我得到的最接近的 但它并不是很接近我想要的 d 3 感谢您提前提供的任何帮助 谢谢 如
  • 如何在 JUnit4 中按特定顺序运行测试方法?

    我想执行由以下注释的测试方法 Test按特定顺序 例如 public class MyTest Test public void test1 Test public void test2 我想确保运行test1 before test2 每
  • 获取当前正在运行的应用程序的列表,而不是进程c#

    我知道您可以使用以下命令获取当前正在运行的进程的列表Process processes Process GetProcesses or Process processes Process GetProcessesByName process
  • 从邮递员到 Microsoft Dynamics crm 365 的 POST/GET 请求

    我试图使用 Web API 创建实体 因此 使用我的实例 url client id client secret 我可以成功生成访问令牌和刷新令牌 但每当我尝试使用该 access token 发出任何发布请求时 我都会收到 401 未经授
  • 在图像顶部绘制矩形的浏览器友好方式 R Shiny

    我编写了一个闪亮的应用程序 允许用户在图像顶部绘制矩形 下面是最小的可重现示例 我目前的方法的问题是每次添加矩形时 都会创建一个新图像 将其写入磁盘并进行渲染 发送到用户的浏览器 这需要相当长的时间 当互联网连接速度很慢时 这会变得非常烦人
  • 统一码格式

    我正在处理字符串格式 对于英语 格式很整洁 但对于 unicode 字符 格式很随意 谁能告诉我原因吗 例子 form u lt 15 lt 3 a u u u u u u u u u u for i in range 0 10 print
  • 结束迭代器递减的可移植性如何?

    刚刚遇到减量end 我公司源代码中的迭代器对我来说看起来很奇怪 据我记得这在某些平台上有效 但在其他平台上无效 也许我错了 但是我在标准中找不到任何有用的东西 标准只是说end 返回一个迭代器 它是结束后的值 但它保证是可递减的吗 这样的代
  • 雄辩的 javascript 递归示例中的混乱

    这段递归代码来自 eloquent javascript 一书 function power base exponent if exponent 0 return 1 else return base power base exponent
  • 如何访问Java中自定义注释中定义的字段

    我有以下 Java 代码 import java lang reflect Field public class AnnotationTest public interface Size int size int location Size
  • 无法连接到 Openfire 服务器(使用 smack api)

    我正在尝试使用 smack 4 1 0 运行此代码 Thread D new Thread new Runnable Override public void run SmackConfiguration setDefaultPacketR
  • CMake add_custom_target():使用“调试->开始调试”运行自定义命令

    add custom target NSISTest Preprocess SOURCES precompress nsi add custom command TARGET NSISTest Preprocess POST BUILD C
  • 在 Python 中记录为调用者模块

    我有以下应用程序结构 utils py def do something logger None if not logger logger logging getLogger name print hello logger debug te