2017-02-16 57 views
0

我正在开发一个多租户应用程序,我需要记录更多数据,而不是传递给日志外观。我的意思是,每次我这样做的时候......记录上下文数据(没有明确指定它)

Log::info('something happened'); 

我得到这个:

[2017年2月15日18点12分55秒] local.INFO:事情发生

但我希望得到这个:

[2017年2月15日18时12分55秒] [我的EC2实例ID] [CLIENT_ID] local.INFO:事情发生

正如您所看到的,我正在记录EC2实例ID和我的应用的客户端ID。我当然会简化它,因为我需要在那里记录更多的东西。当我消费和汇总这些日志时,让这些额外的字段使他们非常方便地确定出错的地方和地点。

在Zend框架中,我通常对记录器进行子类化,并将这些额外的字段添加到我的子类中,但我不确定如何使用Laravel做到这一点。我无法找到记录器的实例化位置,这样我就可以插入我的自定义记录器(如果这是Laravel的路径)。所以,我不问如何获得EC2实例ID和其他东西,我只是问什么Laravel记录器的“热线”的正确方式是能够插入这个。

回答

1

只是一个想法......在Laravel记录器是一个真正的独白实例...你可以在上面按一个处理程序,并做你想做的任何处理每个条目......像这样......

<?php 

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

    return $record; 
}); 

按照Laravel文档,您可以在启动时连接到monolog配置中...

定制独白配置

如果你想有超过独白是如何 配置为您的应用程序,你可以使用应用程序的 configureMonologUsing方法完全控制。你应该在呼叫此方法 在你的引导/ app.php文件中的$应用程序变量 文件返回前右:

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

return $app; 

所以不是只是把在$独白实例处理器传递到钩...

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