问题标签 [python-logging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
405 浏览

python - 在 Flask 中更改每个请求的日志级别

我有一个 Flask 代码库,其中始终使用标准库的日志记录模块。我希望能够根据每个请求增加和减少日志级别。通过这种方式,我可以通过设置查询字符串参数或类似的东西来获取记录在我感兴趣的特定请求上的跟踪或调试级别信息。

我知道 Flask 有一个 before_request 和 after_request 装饰器,可以用来提高和降低日志级别。但是,如果抛出未处理的异常并阻止日志级别重置为其默认级别,那将是一个糟糕的交易。是否有可靠的方法来设置和恢复每个请求的日志级别?

我也不太熟悉日志模块如何与线程和 Flask 交互。如果多线程应用程序服务器正在运行我的 Flask 应用程序,记录器是否跨线程共享?我不想降低一个请求中的日志级别,并让另一个不相关的请求与第一个请求的记录器一起执行。

0 投票
2 回答
437 浏览

python - 如何在 Python 中从 LogRecord 获取堆栈跟踪?

我正在用 Python 实现一个自定义处理程序。当然,我需要重写emit(self, record)才能做到这一点。一个例子:

如您所见,每次我使用Logger实例记录某些内容时,这将提供一个LogRecordtoemit方法。

我从 CPython 源代码中看到了当前的实现LogRecord,你也可以从这里看到它。

假设我有Logger一个名为logger. 稍后在代码中的某个地方,我执行以下操作:

由于@thebjorn 评论了回溯模块,我想我可以解决这个问题。但是我现在有三个问题:

  1. 如何从LogRecord实例中获取异常?
  2. 如果我这样做logger.error("message", exc_info=True),那么我不会传递任何异常实例。在这种情况下,我如何获得回溯,因为我没有任何异常实例?

提前致谢。

环境

  • Python 3.5 及以上
0 投票
1 回答
4599 浏览

python-3.x - 如何使用 f-string 样式设置 python.logging 格式

我正在使用 python 3.7 编写一个应用程序,并且只想在其中使用f 字符串

我正在使用 python 日志记录模块来正确记录我的应用程序,并且我想使用特定格式,但文档(和网络)仅举例说明如何使用 %-strings 更改格式。我想知道是否有使用 f-strings 设置记录器格式的选项

0 投票
1 回答
109 浏览

python - 日志模块怪异,日志消息显示错误?

这是一个我觉得这个logging模块很奇怪的小例子:

我不明白为什么要打印'HELLO'日志消息,据我了解,因为没有附加到记录器foo_logger的处理程序,日志消息应该冒泡,并被更高级别的记录器(session)有效地停止,因为它的级别设置为WARNING(默认)。

似乎将级别设置为foo_logger赋予它通过处理程序显示的权利,但我不清楚。

有人可以向我解释为什么要打印该消息吗?我应该怎么做才能拥有我想要的记录器层次结构?

0 投票
1 回答
243 浏览

google-kubernetes-engine - GCP Kubernetes 中的 Python 日志记录

我有一个 dockerized 一个 python 应用程序。我想在 GCP Kubernetes 上部署容器。我已使用该logging模块将日志包含在应用程序中。我的问题是默认情况下日志将存储到stackdriver还是我需要使用google.cloud.logginglogging模块集成来将日志存储到stackdriver

0 投票
0 回答
1916 浏览

docker - 为什么插值键“asctime”不是有效的选项名称?

我有setup.cfg一个

我收到以下错误消息

当它在基于python:3.7-slimGitlab 的 Docker 镜像中执行时。

当我删除这两行

它也适用于在 Gitlab 上运行的 Docker 容器。它适用于我的机器(Ubuntu 18.04)

为什么会发生这种情况,我该如何解决?

0 投票
2 回答
2695 浏览

python - 如果在声明之前调用 logging.info(),Python 中的 logging.basicConfig 将不起作用

基于这个答案,启用详细日志记录的更简单方法

让我们来看看这个 Python 脚本。

从终端运行此脚本python -m verbose -v不会打印任何内容。

如果您logging.info('Starting script!')将文件中的行注释为

然后记录按预期工作。

看起来尝试调用logging.info()之前basicConfig定义的将完全禁用任何日志记录。

它是一个错误logging还是一个常见的问题,为什么会发生这种情况?

我在 Python 3.6.7 上。

0 投票
1 回答
228 浏览

python - 为什么 logging.Logger 在 Windows 的新进程中重置其状态?

我在 Windows 上遇到了 python 日志记录模块的奇怪问题。下面的代码显示了它:

它在 Windows 上打印以下输出:

由于某种原因,新进程中的记录器对象具有默认状态。

我在ubuntu上试过这个,它似乎按预期工作:

这是 Windows 上的预期行为吗?有人可以解释一下吗?

0 投票
1 回答
242 浏览

python - 如何对单个包使用 python 日志记录

我正在开发一个包并在开发过程中使用日志记录来打印我的调试/信息。有没有一种好方法可以只为我的包启用日志记录而不为根目录下的所有内容启用它?

假设我有 my_package:

以及使用该包的主要功能:

此设置将让我看到 my_func() 对 logger.debug() 的调用,但它也会显示来自 other_package 和 another_package 的任何 logger.debug() 调用,这是我不想看到的。如何设置仅从 my_package 看到日志记录的内容?

我可以做一些骇人听闻的事情,比如硬编码禁用彼此包的 logging.propagate 或类似的东西,但感觉应该有更好的方法。

0 投票
1 回答
292 浏览

python-3.x - 无论过滤器如何,Python 记录器总是输出调试消息

我目前正在创建 的子类logging.Logger,它具有基于级别的过滤器,并且此级别可以在日志调用之间更改(因此我使用过滤器而不是setLevel())。DEBUG但是,无论过滤器如何,我的记录器似乎总是打印出带有 level 的消息。下面是我的代码

上面的代码给出了以下输出:

我知道如果我声明SimpleLogger为单独的变量而不是子类,它可以工作,但由于各种原因我需要使用子类。作为参考,这是一个不使用有效子类的版本。

我一生都无法弄清楚为什么调试消息总是在打印。子类和非子类版本之间的差异不是很大,设置级别应该会导致调试和信息消息不出现。任何帮助将不胜感激,谢谢!