问题标签 [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 回答
3622 浏览

python - Python 日志记录:禁用堆栈跟踪

是否有一种简单的方法可以在 Python 3 中禁用异常堆栈跟踪的日志记录,无论是 aHandler还是Formatter

我需要另一个堆栈跟踪Handler,所以exc_info=False在调用中设置 ,Logger不是一个选项。有没有比定义我自己的更简单的方法Formatter

0 投票
1 回答
162 浏览

python - 登录到控制台时出现python3 UnicodeDecodeError

我刚刚将我的 webapp 移植到 python 3。我在我的 Mac 上开发并部署在 CentOS 服务器上。我发现许多UnicodeDecodeError在我的本地测试环境中没有发生,但它们出现在部署服务器中(当然:D)

其中大多数我通过在打开文件时指定编码来修复。但是,有一个地方我不知道如何指定编码,它在日志记录中。我仍然收到错误,例如:

python 2中存在相同的问题(在两个平台上),并通过这个解决了

sys.getdefaultencoder()将from的值更改asciiutf-8

但是现在在 python3sys.getdefaultencoder()中已经utf-8默认了(为什么我们不应该在 py 脚本中使用 sys.setdefaultencoding("utf-8")?)所以我对导致这种行为差异的原因一无所知。

所以:

  • 我应该寻找什么来了解为什么两个平台都有不同的编码默认值?
  • 我该如何解决这个日志记录?
0 投票
1 回答
59 浏览

python - 库记录器应该只有空处理程序吗?

我正在开发一个新库,我对日志记录的概念完全陌生。

我已经使用 Python 的日志记录模块添加了日志记录。我给出的日志记录有一个特定的 FileHandler 设置为调试级别,StreamHandler 设置为警告级别。关于日志的 Python 文档说库应该只有 Null 处理程序。这是文档链接https://docs.python.org/3/howto/logging.html#library-config

如果我的库中仍有独占文件和流处理程序,这会是一个问题吗?

我无法理解如果他们不能拥有自己的自定义处理程序,为什么应该在库中创建日志。

如果有人能消除我对在库中实现日志记录的理解差距,那将非常有帮助。

第二个问题:如果我设置 Null 处理程序,使用我的库的应用程序开发人员如何能够访问/启用我在库中创建的日志?

0 投票
0 回答
538 浏览

python-3.x - 如何使用 python 日志记录修复延迟输出?

我正在使用一个基本的记录器在终端中跟踪我的程序正在做什么,我注意到日志有时会延迟几秒钟或几分钟,甚至无缘无故地被跳过。

这是我的日志记录设置:

没什么特别的,这是我使用记录器的代码示例,在按键事件之后,但在我决定处理事件之前发生了延迟:

我确定只有记录器的输出被延迟或跳过,因为我可以看到程序的其余部分正在正常且立即做出反应,所以我猜可能有一种缓冲区没有正确刷新,但我在日志记录模块的文档。

同样在这个程序中,我使用了一个 matplotlib 动画,我怀疑它与这个问题有关,但我承认我不清楚为什么会发生这种情况以及如何发生这种情况。

有人经历过同样的事情吗?有没有办法“修复”它?

0 投票
1 回答
216 浏览

python-3.x - 将字符串附加到所有 python 日志 aws lambda

我想在我的 lambda 函数中的所有 python 模块生成的日志中添加一个字符串。

假设有2个模块

一个.py

b.py

...

我想在每个日志之前附加一个字符串,比如说 {tid=123456789987654321 uid=123456765432}。并且这个要附加的字符串应该是可配置的。我尝试创建一个单例日志工厂,但事情没有按预期工作。

0 投票
1 回答
38 浏览

python - 作为记录格式化程序的一部分,将函数应用于字符串

我正在努力转换为logging为我的所有日​​志记录转换为库,但我已经在这一步停留了一段时间。我通常使用一些颜色代码转义序列登录到控制台以进行格式化。这在控制台中运行良好,但在不应有任何转义序列的日志文件中不起作用。因此,我有一个修剪转义序列的功能。但是,我不知道如何将该函数链接到我用于控制台输出的格式化程序。

这是我的日志记录设置:

本质上,我的目标是自动运行一个函数remove_escape_sequences(log_string)作为file_formatter. 现在它只是设置为带有占位符的字符串,'%(asctime)s %(levelname)8s: "%(name)24s" - %(message)s'. 我怎样才能做到这一点?

0 投票
1 回答
479 浏览

python - 动态创建导入时的 Python 日志记录模块

我目前正在使用 logging python 模块在编写我的 python 应用程序时记录调试语句。

一切都很好,直到我需要从动态导入 python 模块中记录语句。

我正在制作的 python 应用程序执行 python 脚本并从这些 python 脚本返回结果。把它想象成一个测试运行器和它正在运行的测试脚本。然而,测试脚本是在运行时通过文件确定的。因此,为了在运行程序中运行脚本,我使用 importlib 动态导入它们。

此时一切正常,但是我注意到日志记录模块存在一些问题。因为我是在运行时而不是静态地导入代码(静态地 = python 模块的开头)。main_script 上的日志记录模块“似乎”停止了,而 side_script 创建了一个新的日志记录模块。然后,由于处理程序写入日志而不是附加(按设计),新的日志记录模块会删除我的日志文件。

一个有趣的注意事项是,只要我“经典”import Side_Script # NOT at the beginning of the file或动态地在函数中导入另一个模块,Logging 模块就会重新启动,并且我当前的日志文件由于写权限而被删除。无论我是否运行 python 导入。所以我很确定它不是来自 importlib。

我不确定到底发生了什么。是否可以在函数中动态创建的模块中保持相同的日志记录模块?

我创建了一个基本示例来演示我的问题。请注意,这不是我的实际应用程序,在我的应用程序中,正在导入的模块在运行时通过文件是已知的。

Main_Script.py

Side_Script.py

Log_Config.conf

当前日志输出:

理想的日志输出:

有没有像在 pythons 示例中那样保留相同的记录器? https://docs.python.org/3.5/howto/logging.html#logging-from-multiple-modules

希望这是足够的细节。

让我知道我是否可以澄清任何事情。

谢谢!

0 投票
1 回答
622 浏览

python-3.x - 无法使用 python 在 EC2 实例中创建日志文件

我在 EC2 实例中运行一个脚本作为作业(通过任务调度程序),它创建自己的日志文件。在我的本地机器上,它运行得非常好并创建了文件,但在 EC2 上我根本看不到文件。

这是示例代码

请帮我解决它。

0 投票
0 回答
50 浏览

python-3.x - 给定父模块,更改子模块的日志级别

有没有办法改变只给父母的孩子的日志记录级别?我正在考虑做这样的事情,但似乎必须有一个更简单的方法。

一些导入的模块有不同的级别,所以我不能设置根记录器。

0 投票
0 回答
311 浏览

python - 关于为什么建议的 Sentry LOGGING 设置有效的问题

Sentry 文档中,建议进行以下设置LOGGING

所有三个记录器都console为其处理程序选择 。为什么 Sentry 会处理任何日志?这是因为所有三个记录器都继承自root记录器,所以设置console为处理程序会将控制台添加到现有的哨兵记录器?或者是其他东西?

然后,处理程序上的注释sentry指出“要捕获的不仅仅是 ERROR,请更改为 WARNING、INFO 等”。为什么要更改它来INFO处理INFO级别错误?记录器root已设置WARNING为最低级别,那么任何处理程序如何向处理程序发送INFO级别错误sentry

例如,如果我在一个类似的文件accounts/models.py中,我调用

这应该创建一个名为 的记录器accounts.models,它应该从记录器继承root文档说:

当向记录器提供消息时,将消息的日志级别与记录器的日志级别进行比较。如果消息的日志级别达到或超过记录器本身的日志级别,则消息将进行进一步处理。如果没有,该消息将被忽略。

如果从忽略低于以下级别的所有内容的记录器继承,为什么LOGGER.info('test')在这种情况下会向 Sentry 发送任何内容?LOGGERrootWARNING