Python 日志记录:将属于一个请求的日志分组

2023-12-23

有没有一种方法可以对属于一个 Web 请求的 Python Web 应用程序的日志进行分组?

Example:

2015-02-11 13:06:32 myapp.middleware.MYAPPMiddleware: INFO     Login of user foo was successful
2015-02-11 13:06:32 myapp.middleware.MYAPPMiddleware: INFO     Login of user bar failed
2015-02-11 13:06:32 myapp.send_mails: INFO     failed to send mail to [email protected] /cdn-cgi/l/email-protection

上述日志行彼此无关。

你如何用Pythonic方式解决这个问题?


日志条目本质上被设计为彼此独立。
将它们连接在一起的正确方法是将一些上下文信息包含到条目中,以便稍后查看日志时进行过滤。

以下是包含此类信息的 Sharepoint 日志记录示例:

Timestamp               Process             TID     Area                    Category                    EventID Level       Message     Correlation
02/26/2015 17:49:19.65  w3wp.exe (0x1F40)   0x2358  SharePoint Foundation   Logging Correlation Data    xmnv    Medium      Name=Request (POST:http://reserver2:80/pest/_vti_bin/sitedata.asmx) d1e2b688-e0b2-481e-98ce-497a11acab44

在Python中logging docs, 将上下文信息添加到日志输出中 https://docs.python.org/2/howto/logging-cookbook.html#adding-contextual-information-to-your-logging-output建议使用以下两种方法之一:LoggerAdapter or a Filter.

LoggerAdapter像这样使用(示例基于文档中的示例):

class AddConnIdAdapter(logging.LoggerAdapter):
    def process(self, msg, kwargs):
        return <augment_message(msg,arbitrary_info)>, kwargs
la = AddConnIdAdapter(<logger>,extra=<parameters, saved in self.extra>)
<...>
la.info(<message>)

Filter像这样使用:

#Either all messages should have custom fields
# or the Formatter used should support messages
# both with and without custom fields
logging.basicConfig(<...>,format='%(asctime)-15s %(name)-5s %(levelname)-8s IP: %(ip)-15s User: %(user)-8s %(message)s')
class AddClientInfo(logging.Filter):
    #override __init__ or set attributes to specify parameters
    def filter(self, record):
        record.ip = <get_client_ip()>
        record.user = <get_client_name()>
        return True    #do not filter out anything
l=<logger()>
l.addFilter(AddClientInfo()) #can attach to either loggers or handlers
<...>
l.info('message')

正如你所看到的,区别在于LoggerAdapter是不透明的,而Filter是透明的。示例中,前者修改消息文本,后者设置自定义属性(实际编写需要双方配合)Formatter使用)但事实上,两者都可以做到。

因此,如果您只需要向某些消息添加上下文,则前者更有用,而后者更适合扩充所有或大部分正在记录的消息。

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

Python 日志记录:将属于一个请求的日志分组 的相关文章

  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 比较数组中的文件、从文本文件中删除行、函数、日志记录

    所以我创建了这两个数组 Approved Shares 和 Current Shares Reads Approvedshare txt and makes the txt file into an array public objFSO
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 将 SQLAlchemy 会话与 Celery 一起使用的正确方法是什么?

    我已经尝试弄清楚这个问题有一段时间了 但我现在找到的很多答案都已经过时 超过 6 年前的帖子 或者相关性较低 问题实际上是如何在 celery 中正确处理数据库会话 我当前的设置是 我有一个全局 DbEngine 对象 其中包含dsn en
  • 快速将 Excel 导入数据表

    我正在尝试将 Excel 文件读入 Data DataTable 列表中 尽管使用我当前的方法可能需要很长时间 我基本上是逐个工作表 逐个单元地进行操作 这往往需要很长时间 有没有更快的方法来做到这一点 这是我的代码 List
  • 如何禁用/隐藏 vscode-python 中的变量分组

    最近的 ms python 扩展 v2020 5 86806 https github com microsoft vscode python releases tag 2020 5 86806 for vscode 在调试控制台 变量资源
  • 部署到生产时找不到索引视图?

    尝试将 MVC 应用程序部署为现有 ASP NET 3 5 应用程序 非 MVC 的子应用程序时 我遇到了问题 错误是 The view index or its master could not be found The followin
  • 如何阻止 WPF KeyDown 事件从某些包含的控件(例如 TextBox)中冒泡?

    我的程序非常大 并且使用 WPF 我想要一个使用 R 的全局快捷键 不带修饰符 有许多控件 例如 TextBox ListBox ComboBox 等 它们都在控件本身内部使用字母 这很好 这对我来说是正确的 But 我想阻止 KeyDow
  • 如何在一个proc打印语句中打印多个数据集?

    我有一个 sas 查询 如果我创建了 3 个数据集 可以说命名为ds1 ds2 ds3 现在 我想在一个 proc print 语句下打印所有这些 那么我们该怎么做呢 就像 我想要这样的东西 proc print data work ds1
  • 在 GPU 上计算图像相似度 [OpenGL/遮挡查询]

    OpenGL 假设我绘制了一幅图像 然后使用 XOR 绘制了第二幅图像 现在我在某处有了带有非黑色像素的黑色缓冲区 我读到可以使用着色器来计算 GPU 上的黑色 rgb 0 0 0 像素 我还读到它必须与 OcclusionQuery 做一
  • 在自定义静态框架 iOS 中使用 magicrecords 库

    我一直在为 iOS 实现一个自定义静态框架 一切都运行良好 但现在我意识到我需要通过框架中的 coredata 存储信息 我一直在之前的项目中使用 magicrecord 库 我想知道是否有人有将 magicrecord 集成到您自己的自定
  • 获取 LinkedHashSet 的最后一个

    我想存储数字 1 2 3 4 的列表 让我们从List
  • Proguard 保留接口方法参数名称

    我使用 keepparameternames 但它不响应界面 The interface s methond parameter is proguard Thank you for your help Proguard 可以很好地保留参数名
  • LISTAGG 奇怪的串联[重复]

    这个问题在这里已经有答案了 当我使用下面的查询来获取所需的详细信息时 SELECT USERNAME FULLNAME DEPARTMENT LISTAGG TASKNAME WITHIN GROUP ORDER BY TASKNAME T
  • 如何在 Xamarin 中获取 GoogleApiClient?

    我想实现类似的东西this https stackoverflow com a 25173057 2611340在我在 Xamarin 中开发的 Android 应用程序中 但找不到其中的命名空间GoogleApiClient是 有人可以帮
  • Blackberry OS 4.5 应用程序的通知服务

    我正在开发一个类似于电子邮件应用程序的应用程序 每当收到新消息时 我的通知服务应通过更新图标向用户指示更改 此外 通知服务应持续侦听服务器的传入事件 我正在使用 4 5 版本的操作系统进行开发 RIM OS 您有多种选择来通知 用户 都不是
  • 如何将 Google 地图标记链接到其他元素?

    使用谷歌地图 http code google com apis maps documentation reference html 和 JavaScript 我已经能够轻松地显示几个标记 每个标记上都有一个漂亮的小信息窗口 Create
  • 关闭 Cypress 中的 Angular 材质对话框

    我正在将 Cypress 添加到我的 Angular 6 项目中 并使用 Angular Material 欢迎新用户使用材质对话框 其中包含 iFrame 并且通过单击对话框外部来关闭该对话框 我尝试通过多种方式在 Cypress 中关闭
  • ng2-charts 更新标签和数据

    我正在尝试使用 ng2 chart 动态创建图表 我从 Angular 2 服务获取信息 当我仅更改图表标签时 它有效 当我更改数据时 它仅有效 但是当我更改两者时 仅数据在图表中更新 有人可以解释一下这种奇怪的行为吗 我的模板
  • 连接关闭后 Socat 终止

    此命令 串行端口重定向器 接受 TCP 11313 上的单个连接 socat PTY link dev ttyV1 echo 0 raw unlink close 0 TCP LISTEN 11313 forever reuseaddr 但
  • AngularJS ui-router,滚动到状态更改的下一步

    我在我的应用程序中使用 UI router 当 URL 状态更改时 我想使用一个简单的 scrollTo 到锚点 我不想从模板加载下一步 或加载新的控制器 我只是希望页面上已经有几个 div 并在它们之间上下滚动 HTML 的简化视图如下所
  • `if __name__ == '__main__'` 在 javascript es6 模块中等效

    是否可以检查 JavaScript 文件是否直接运行 或者是否需要作为 es6 模块导入的一部分 例如 包含一个主脚本 main js import other if mainTest console log This should run
  • Python 日志记录:将属于一个请求的日志分组

    有没有一种方法可以对属于一个 Web 请求的 Python Web 应用程序的日志进行分组 Example 2015 02 11 13 06 32 myapp middleware MYAPPMiddleware INFO Login of