记录上下文数据(没有明确指定)

Log contextual data (without specifying it explicitly)

我正在开发一个多租户应用程序,我需要记录比我传递给日志外观的数据更多的数据。我的意思是,每次我这样做...

Log::info('something happened');

我明白了:

[2017-02-15 18:12:55] local.INFO: something happened

但我想得到这个:

[2017-02-15 18:12:55] [my ec2 instance id] [client_id] local.INFO: something happened

如您所见,我正在记录 EC2 实例 ID 和我的应用程序的客户端 ID。我当然正在简化它,因为我需要在其中记录更多的东西。当我使用和汇总这些日志时,有了这些额外的字段,它们可以非常方便地找出哪里出了问题。

在 Zend Framework 中,我通常将记录器子类化并在我的子类中添加这些额外的字段,但我不确定如何使用 Laravel 做到这一点。我找不到记录器实例化的位置,以便我可以插入我的自定义记录器(如果这是进入 Laravel 的方式)。

所以,我不是在问如何获取 EC2 实例 ID 和其他东西,我只是在问 "hot wire" Laravel 记录器的正确方法是什么插入这个。

只是一个想法...Laravel 中的记录器实际上是一个 Monolog 实例...您可以在其上推送一个处理程序并对每个条目执行您想要的任何处理...就像这样.. .

<?php

$logger->pushProcessor(function ($record) {
    $record['extra']['dummy'] = 'Hello world!';

    return $record;
});

根据 Laravel 文档,您可以在启动时连接到 monolog 配置...

Custom Monolog Configuration

If you would like to have complete control over how Monolog is configured for your application, you may use the application's configureMonologUsing method. You should place a call to this method in your bootstrap/app.php file right before the $app variable is returned by the file:

$app->configureMonologUsing(function ($monolog) {
    $monolog->pushHandler(...);
});

return $app;

因此,只需将处理器推送到传递给挂钩的 $monolog 实例上...

只是一个想法,我没有在 Laravel 中尝试过,但之前使用过 Monolog...