在Laravel 5.6中,我试图制作适当的备用日志,但我做到了:
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'slack'],
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'TEST',
'icon' => ':boom:',
'level' => 'info',
],
它可以工作,但是我想指定其他字段,并且如果它与某些其他条件匹配,也许可以对其进行一些自定义。
我正在查看SlackWebhookHandler.php独白文件,但并非所有参数都可在此配置中工作。 例如,表情符号和用户名不起作用-我不知道slack是否已经有更改机器人用户名的选项。 另一个示例是,在此文件中,该文件称为useAttachment,在这里它只是附件-存储名称的位置。
回到我做的话题:
Log::info('added test',['test'=>'test']);
它可以工作,但是为了节省时间,我想在每个请求中发送其他字段:
'added test',['test'=>'test', 'more' => 'test2']
我怎么能做到?我需要以某种方式连接到Log Class和Slack驱动程序,但是我不知道该怎么做?
答案 0 :(得分:0)
我能够更接近解决方案,但还是没有: 现在在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;
});
}
}
}
}
并且仅当我不尝试在松弛状态下进行自定义附件时它才有效。.当我尝试这样做时:
$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丢失了“ attachments”数组。我在SlackWebhookHandler中的write函数中检查了它,因为在返回时,此pushProcessor仍然存在,但没有发送给slack。我知道这可能与$handler->setFormatter($formatter);
有关,但是如果我删除它,问题仍然存在-因此我仍然不知道如何解决。
答案 1 :(得分:0)
我调试了SlackRecord :: getSlackData,在那里您看到他如何处理附件并将附加数据添加到记录中。
对我来说,完全适合在logging.php中为Slack Channel设置'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
并查看他为何跳过所需的附件部分。