“怎么做?”;“懒惰的写作”;按请求登录Django?

“怎么做?”;“懒惰的写作”;按请求登录Django?,django,Django,使用Django,我需要对涉及数据库写入的每个请求进行一些日志记录 我了解Django的process\u request()和process\u response()中间件钩子,但据我所知,这些钩子在呈现网页响应的关键路径中(根据设计) 我不想让post请求数据库写入操作耽误页面的响应时间 Django是否有一个简单的设计模式,允许我进行“惰性日志写入”,在请求处理过程中,我可以使用请求挂钩收集信息,但任何后续操作和实际的日志写入操作直到将响应写入用户之后才会发生 我目前正在使用WSGI,但希

使用Django,我需要对涉及数据库写入的每个请求进行一些日志记录

我了解Django的
process\u request()
process\u response()
中间件钩子,但据我所知,这些钩子在呈现网页响应的关键路径中(根据设计)

我不想让post请求数据库写入操作耽误页面的响应时间

Django是否有一个简单的设计模式,允许我进行“惰性日志写入”,在请求处理过程中,我可以使用请求挂钩收集信息,但任何后续操作和实际的日志写入操作直到将响应写入用户之后才会发生

我目前正在使用WSGI,但希望使用最通用的解决方案。

Django实现一个-信号,该信号在响应处理完成后触发,但缺点是,它不允许您访问当前的
请求
对象,这使得它对日志记录不太有用。。。连接django响应处理的最新位置很可能位于。例如,您可以将数据临时存储在
request.session
中,并使用
close()
方法将其写入数据库

但我想您还应该考虑其他选择:您可以使用类似于异步处理日志记录任务的东西。此外,还有类似的非sql数据库为您提供方便且性能良好的日志记录功能,例如数据库,它可以给您带来巨大的性能优势。

Django实现一个-信号,该信号在响应处理完成后触发,但缺点是,它将不允许您访问当前的
请求
对象,这使得它对日志记录不太有用。。。连接django响应处理的最新位置很可能位于。例如,您可以将数据临时存储在
request.session
中,并使用
close()
方法将其写入数据库


但我想您还应该考虑其他选择:您可以使用类似于异步处理日志记录任务的东西。此外,还有类似的非sql数据库为您提供方便且性能良好的日志记录功能,例如数据库,它可以给您带来巨大的性能优势。

信号实际上是在进程中执行的,但芹菜+1作为异步解决方案。您是对的,请在代码库中查找它,该信号在WSGI处理程序返回响应之前发送,尽管该信号的名称可能表示其他内容。对于所有感兴趣的人来说:信号实际上是在进程中执行的,但是芹菜+1是一个异步解决方案。您是对的,在代码库中查找它,在WSGI处理程序返回响应之前发送信号,尽管信号的名称可能暗示了其他内容。对于所有感兴趣的人:一种替代方法是使用一个日志处理程序来缓冲写操作。也许给它一个flush(),这样你就可以告诉它什么时候写入“真正的”处理程序。另请参阅,另一种选择是使用一个logging.handler来缓冲写入。也许给它一个flush(),这样你就可以告诉它何时写入“真正的”处理程序