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

时间:2017-02-16 23:19:14

标签: php laravel logging laravel-5.4

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

Log::info('something happened');

我明白了:

  

[2017-02-15 18:12:55] local.INFO:发生了什么事

但我希望得到这个:

  

[2017-02-15 18:12:55] [我的ec2实例ID] [client_id] local.INFO:发生了什么事

正如您所看到的,我正在记录EC2实例ID和我的应用程序的客户端ID。我当然正在简化这个,因为我需要在那里记录更多的东西。当我使用和聚合这些日志时,拥有这些额外的字段可以非常方便地找出出错的地方和位置。

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

所以,我不是在问如何获取EC2实例ID和其他东西,我只是想知道Laravel记录器“热线”的正确方法是能够插入它。

1 个答案:

答案 0 :(得分:1)

只是一个想法... Laravel中的记录器实际上是一个Monolog实例...你可以在它上面推一个处理程序,并为每个条目做任何你需要的处理......就像这样......

<?php

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

    return $record;
});

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

  

自定义Monolog配置

     

如果您想完全控制Monolog的方式   为您的应用程序配置,您可以使用该应用程序   configureMonologUsing方法。您应该调用此方法   在$ app变量之前的bootstrap / app.php文件中   由文件返回:

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

return $app;

所以只需将$ monolog实例上的处理器推送到钩子......

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