问题标签 [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 投票
2 回答
2065 浏览

python - 捕获 structlog 中的所有 stdout/stderr 以生成 JSON 日志

我目前正试图摆脱 print() 并开始使用 ELK 堆栈和 structlog 模块集中日志收集来生成结构化的 json 日志行。这对于我使用 loggingHelper 模块自己编写的模块来说非常好,我可以导入和使用

在其他模块和脚本中。这是 loggingHelper 模块类:

这会产生格式良好的输出(每行一个 JSON),filebeat 能够读取并转发到 Elasticsearch。但是,第三方库完全粉碎了格式良好的日志。

正如您所看到的,来自第三方 Librara(googleapiclient)的信息级别和错误级别消息都是在不经过日志处理器的情况下打印的。

使用我编写的 loggingHelper 模块捕获和格式化在执行一个脚本中发生的所有事情的最佳方式(也是最 Pythonic)是什么?这甚至是最佳实践吗?

编辑:目前记录器确实写入标准输出本身,然后使用>>和2>&1将其重定向到crontab中的文件。如果我想将通过第三方库日志记录写入 stdout/stderr 的所有内容重定向到我,这对我来说似乎是一种不好的做法,因为这会导致循环,对吗?因此,我的目标不是重定向,而是捕获日志处理器中的所有内容。相应地更改了标题。

此外,这是我想要实现的目标的粗略概述。我非常愿意接受与此不同的一般批评和建议。 在此处输入图像描述

0 投票
1 回答
2387 浏览

python-logging - 如何记录 swagger / connexion 请求正文?

我正在使用 connexion 和 Swagger 在 Python 中创建 API。我想将所有来电记录到一个文件中,以便查看请求的内容。我已经能够记录我收到的电话的路径,但我不知道如何记录身体。

这是我配置日志记录的地方:

当我查看日志时,我看到了路径,如下面的 POST 调用...

2019-03-23 12:47:16,182 - werkzeug - INFO - 127.0.0.1 - - [23/Mar/2019 12:47:16] “POST /golden_record/account HTTP/1.1” 400 -

但我没有看到电话的正文(即我发送的数据)。有没有办法为每个打进来的电话自动记录这个?这样做将有助于调试未按预期运行的调用。谢谢!

0 投票
1 回答
1228 浏览

python-3.6 - 如何在 python logging.basicConfig 中使用 TimedRotatingFileHandler 作为文件名?

我第一次使用 Python 'logging' 模块,目前,我正在尝试使用“logging.basicConfig()”生成一些示例日志文件。我的主要动机是生成名称中带有日期的示例日志文件,“dd-mm-YY_.log”。在做了一些初步研究后,我发现我们可以使用“TimedRotatingFileHandler”来完成这项工作。下面是来自 Stackoverflow 帖子的示例代码

但是我无法弄清楚如何在 TimedRotatingFileHandler() 函数中使用“logging.basicConfig”中的“格式”和“级别”。

下面是我写的整个python代码:

在上面的代码中,一切正常,直到我希望在程序中引入“TimedRotatingFileHandler”。

以下是我在 log.txt 中收到的错误

从上面的错误很明显,我无法将逻辑正确地放在适当的位置。

新的日志结构

请建议。谢谢你。

0 投票
0 回答
409 浏览

python-3.x - Python日志记录使文件为空

我知道有很多与此相关的问题,但我还没有找到适用于我的案例的问题。

我在 Windows 上运行一个脚本(Python 3.7.0),它应该记录一些事件,但它只是创建空文件 log_minera.log。

日志记录级别似乎没问题,与写入模式相同,处理程序连接到记录器...我怀疑关闭窗口只会杀死未刷新的流,因此永远不会被写入,但是将行添加到刷新无论按 ENTER 还是关闭都不起作用。请帮忙!

0 投票
0 回答
935 浏览

python - Python 日志记录模块对性能的影响很大

我通常使用 Python 的内置logging模块在开发过程中更好地调试我的代码。我的典型代码对性能有点敏感。我的假设是,一旦我完成了代码的调试,我可以简单地将日志记录级别设置为WARNING,编译器会删除所有logger命令。

当我注释掉所有的日志记录调用时,我决定对代码进行分析以确保和 viola - 与通过设置更高级别关闭日志记录的代码相比,我的代码性能提高了 20 倍。这意味着,当您提高日志记录级别时,编译器仍然会为日志记录留下一个分支,并且由于所有分支,CPU 性能会很差!

这个观察是正确的,还是我完全错过了什么?

0 投票
1 回答
2262 浏览

python-3.6 - 为什么 Python 日志记录模块会抛出属性错误?

我第一次使用日志记录模块。我能够根据我的要求编写程序。try 和 except 中编写的逻辑也几乎可以成功运行,并且在日志文件中生成了日志。但由于某种原因,我在 IDE 控制台上看到所有“logging.info”和“logging.exception”的“AttributeError”。因此,为了交叉验证,我注释掉了所有这些位置,这次我的代码运行没有任何错误,但日志文件中没有记录任何内容。这很明显。下面是整个程序

以下是来自我的 IDE 控制台的错误消息:

在过去的两天里,我一直在上网,但没有任何运气。请帮我找出我的错误。

添加了更多错误:

谢谢你。

0 投票
1 回答
324 浏览

python - Python logging setLevel 整数输入是什么意思?

看看这个链接:https ://docs.python.org/3/library/logging.html#levels

他们谈论记录级别,其中DEBUG数值为10INFO数值为20

我正在查看一个使用过的程序handler.setLevel(level=15)。显然,这是一个自定义日志级别。这个答案中讨论了如何添加一个:Python3 add logging level

我发现logging文档不足以回答这些问题:

  • 15在日志记录的上下文中是什么意思?
  • 这是否意味着它几乎DEBUG?为什么不只使用INFO级别?
0 投票
1 回答
904 浏览

python - Python 2.7 Unittest 检查是否记录了警告

我正在尝试为我的模块编写一个用 Python 2.7 编写的单元测试,我现在无法迁移到 3.x。我想要的是这个测试做的是检查我的模块是否生成警告日志,如果它生成则捕获它。通过搜索网络和堆栈溢出,我找不到 Python 2.7 的答案。我已经包含了一个简单的可测试代码,您可以使用它来尝试或更好地理解我的问题。

更新:只是为了澄清我愿意改变我的测试用例,即test_warning_2能够捕获log.warn该方法的当前实现只是一个占位符。

在这里,如果您看到函数generate_warning_2,您会注意到我正在使用我的测试用例未捕获的常规 python 日志记录警告。我知道原因是因为它不使用warnings模块。我只是想展示我想要它做什么。

generate_warning_1我使用模块捕获警告日志的另一个功能warnings,这是我当前的实现,效果很好。

我希望能够捕获log.warn而不是不得不使用warning来实现这一点。这在 Python 2.7 中可行吗?请不要为 Python 3.x 提供答案,因为我已经知道它可能在那里。

希望我的问题很清楚,请随时向我提问或在适当的地方进行编辑。任何帮助在这里表示赞赏。

0 投票
1 回答
165 浏览

python - 为什么 print() 和 logger 对象以意外的顺序流式传输到控制台输出?

我试图在使用两个将输出流式传输到控制台的记录器对象之前和之后使用打印功能。事情是我得到了一个不符合预期顺序的非常混乱的输出。

我尝试将 print() 更改为 logger_object.info() 并且效果很好。

具有意外输出的完整代码:

添加 loggerC 对象以将 print() 替换为 loggerC.info() :

使用 print() 意外输出的第一种情况是:

第二种情况使用 loggerC.info() 而不是 print() 这是预期的输出:

0 投票
2 回答
921 浏览

python - 在 PyCharm 中记录到文件时出现 UnicodeEncodeError

我正在使用 Python 3 中的“日志记录”将一些 Unicode 字符记录到文件中。代码在终端中工作,但在 PyCharm 中出现 UnicodeEncodeError 失败。

我使用logging.config.fileConfig. 在配置中,我使用encoding = utf-8. 登录到控制台工作正常。

我正在使用 PyCharm 2019.1.1(社区版)。我认为我没有更改任何相关设置,但是当我在另一台计算机上的 PyCharm 中运行相同的代码时,错误没有重现。因此,我怀疑问题与 PyCharm 设置有关。

这是一个最小的例子:

logcfg.ini 的内容(在同一目录中)如下:

我希望在控制台中看到前两条日志消息,在日志文件中看到第三条消息。前两个日志语句运行良好,但第三个失败。以下是 PyCharm 中完整的控制台输出: