Php Laravel松弛日志,但带有附加字段和配置
在Laravel 5.6中,我尝试制作适当的松弛日志,我做到了:Php Laravel松弛日志,但带有附加字段和配置,php,laravel,slack,slack-api,Php,Laravel,Slack,Slack Api,在Laravel 5.6中,我尝试制作适当的松弛日志,我做到了: 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single', 'slack'], ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHO
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'slack'],
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'TEST',
'icon' => ':boom:',
'level' => 'info',
],
它可以工作,但我想指定额外的字段,如果它匹配其他一些条件,可能会对其进行一些自定义
我正在查看SlackWebhookHandler.php monolog文件,但并不是所有参数都在这个配置中工作。。
例如,表情符号和用户名不起作用-我不知道slack是否已经有了更改机器人用户名的选项。
另一个例子是,在这个文件中,它被称为useAttachment,而在这里,它只是一个附件-名称存储在哪里
回到我做过的主题:
Log::info('added test',['test'=>'test']);
它可以工作,但对于slack,我想在每个请求中发送额外的字段,例如:
'added test',['test'=>'test', 'more' => 'test2']
我怎样才能完成它?我需要以某种方式连接到Log Class和slack driver,但我不知道如何做到这一点?我能够更接近解决方案,但仍然没有: 在logging.php上,我现在有了
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'tap' => [App\Logging\SlackLogger::class],
'username' => 'BOT',
'attachment' => false,
'emoji' => ':boom:',
'level' => 'info',
],
我创建了App/Logging/SlackLogger.php:
namespace App\Logging;
use Monolog\Logger;
use Monolog\Handler\SlackWebhookHandler;
use Monolog\Formatter\LineFormatter;
use Monolog\Formatter\JsonFormatter;
class SlackLogger
{
/**
* Customize the given logger instance.
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke($logger)
{
$dateFormat = "Y-m-d H:i:s";
$checkLocal = env('APP_ENV');
foreach ($logger->getHandlers() as $handler) {
if ($handler instanceof SlackWebhookHandler) {
$output = "[$checkLocal]: %datetime% > %level_name% - %message% `%context% %extra%` :poop: \n";
$formatter = new LineFormatter($output, $dateFormat);
$handler->setFormatter($formatter);
$handler->pushProcessor(function ($record) {
$record['extra']['dummy'] = 'test';
return $record;
});
}
}
}
}
只有当我不尝试在slack上制作自定义附件时,它才会起作用。。当我尝试这样做时:
$handler->pushProcessor(function ($record) {
$record['extra']['dummy'] = 'test';
$record['attachments'] = [
'color' => "#36a64f",
"title" => "Slack API Documentation",
"text" => "Optional text that appears within the attachment"
];
return $record;
});
$record losts“attachments”数组。。我在写函数中的SlackWebhookHandler中检查它,因为在返回的这个pushProcessor中它仍然存在,但没有发送到slack。我知道这可能与
$handler->setFormatter($formatter)有关代码>但如果我删除它,问题仍然存在-因此我仍然不知道如何解决它。我将自己调试到SlackRecord::getSlackData,在这里您可以看到他如何处理附件并将的附加数据添加到记录中
对我来说,在logging.php中为Slack通道设置'context'=>true完全合适,并定义一个处理器,它只将我需要的数据添加到记录中
class SlackProcessor {
/**
* @param array $record
* @return array
*/
public function __invoke(array $record) {
$record["context"]["Env"] = env("LOG_SLACK_USERNAME", "localhost");
$record["context"]["Full URL"] = Request::fullUrl();
$record["extra"]["Request Data"] = Request::all();
return $record;
}
}
因此,也许您可以再次调试到getSlackData
,看看他为什么跳过您需要的附件部分