使用Laravel 5,我希望Log::error
通过直接调用此方法或默认ExceptionHandler
调用report
方法,每次(或类似)触发通知(松弛但无关紧要).我想我必须扩展默认的Laravel的Log系统,但我不确定.这样做的(最佳)"laravel方式"是什么?(不改变Log::error
我整个代码中的每个调用).
首先,我认为我只需要将Log Facade更改为另一个,但它不会处理ExceptionHandler
(即由于未捕获的异常导致的500个错误).另一种解决方案可能是直接在添加一些代码ExceptionHandler
,但如果我报告错误,否则它将不会被触发Log::error()
或其他方式(app('logger')->error()
,logger()->error()
,等).
use*_*496 18
编辑:从Laravel 5.6开始破碎
该Log
门面实际上只是一个基本的实例的包装Monolog
.好消息是Monolog带来了对Slack的支持.你只需要告诉Monolog使用它.
话虽如此,一切都可以设置为3行代码.
$monolog = \Log::getMonolog();
$slackHandler = new \Monolog\Handler\SlackHandler('your-token', '#your-channel', 'Monolog', true, null, \Monolog\Logger::ERROR);
$monolog->pushHandler($slackHandler);
Run Code Online (Sandbox Code Playgroud)
然后得到这个运行,你可以为它创建自己的服务提供商或刚落,它AppServiceProvider
的boot
方法.
您可能希望查看源代码,SlackHandler
以防构造函数需要使用更多选项.
现在,无论何时\Log::error('some error');
,该错误的消息都将发送到您已设置的Slack通道.请注意,这个"冒泡",这意味着它会被发送到时差通道的任何记录进行错误了,error
,critical
,alert
,和emergency
.如果您只想记录s bubble
,false
请将参数设置为error
.
对于Laravel 5.6及以上版本:
Laravel支持从5.6开始进行日志记录的松散驱动程序.config/logging.php
像这样配置你的松弛通道:
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],
Run Code Online (Sandbox Code Playgroud)
更多信息在Laravel docs和Slack传入webhooks.
你可以听听illuminate.log [String $level, String $message, Array $context]
活动.如果$level
等于error
,您将发送通知.
在你的中定义事件监听器 EventServiceProvider
protected $listen = [
'illuminate.log' => [
'App\Listeners\LogEventListener'
]
];
Run Code Online (Sandbox Code Playgroud)
这将告诉Laravel LogEventListener
在illuminate.log
事件被触发时触发.
然后创建这个监听器:
namespace App\Listeners;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class LogEventListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param DeployDisabledEvent $event
* @return void
*/
public function handle($event)
{
if ($event->type == 'error') {
$this->notifyViaSlack($event->message, $event->context);
}
}
/**
* Send Slack notification.
*
* @param string $message
* @param string $context
* @return void
*/
protected function notifyViaSlack($message, $context)
{
/*
* Slack notification logic
*/
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10865 次 |
最近记录: |