symfony 命令 exec 中的 Symfony2 monolog 记录器自定义字段

波尔

情况:

在我的 Symfony2.8 API 中,我有一个用于 Monolog 的自定义 RecordProcessor,我在其中添加了一些方便的信息:

my_api.logger.formatter:
    class: Monolog\Formatter\LineFormatter
    arguments:
        - "[%%datetime%%] [%%extra.request_id%%] [%%extra.ip%%] [%%extra.user%%] %%channel%%.%%level_name%%: %%message%% %%context%%\n"

如您所见,我向每个请求(我猜是常见做法)添加一个唯一的执行 Uuid (request_id) 到前端控制器 (web/app.php) 中的请求标头。所以这是我的日志行的样子:

[2017-10-27 13:11:24] [7e1666b7] [79.XX.XX.XX] [[email protected]] app.INFO: OutGoing GET ...
[2017-10-27 13:11:24] [15ded457] [11.XX.XX.XX] [[email protected]] security.DEBUG: ... 
[2017-10-27 13:11:24] [15ded457] [11.XX.XX.XX] [[email protected]] security.DEBUG: ...
[2017-10-27 13:11:24] [15ded457] [11.XX.XX.XX] [[email protected]] app.INFO: Incoming POST ...
[2017-10-27 13:11:24] [15ded457] [44.XX.XX.XX] [[email protected]] app.INFO: Asynchronous : SENDING message ....

我将rabbitmq 与rabbitmq-bundle 和phpamqplib 用于异步重逻辑处理。这适用于由于 symfony 命令(和 rabbitmq-supervisord-bundle)启动的 rabbitmq 消费者。这些 rabbitmq 消费者将内容记录到应用程序的公共日志文件 (/var/log/env.log)。

问题:

我想在消费者进程的日志行中添加一个 unique_id(来自 symfony 命令,因为进程本质上是异步的,并且一些异步进程启动其他异步进程,日志文件不可读......)。怎么办?我在 Monolog 处理程序上找到了很多文档,但似乎不是我要找的。我还尝试使用我的 uniqueId 标头创建一个假请求,将其推送到 stack_request (如经典 http trait),但这看起来很丑陋且太假。

理想情况下,我想在我的抽象 GenericMyAppConsumer.php 中这样做:

//Constructor of any consumers (sf command)
//...
$this->container->get('logger')->setData('extra.request_id', $this->uniqueId);

因此它将用于所有当前线程日志记录。

我希望我很清楚。谢谢。

波尔

好的,如果请求标头中没有任何请求 ID,我最终直接在容器感知的 Monolog 处理器中设置了当前请求。那不是很安全,但我看不到其他方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章