Laravel 5.1 是否广播您可以监听的任何日志事件?例如,如果创建日志条目并将其保存到日志文件中,它是否提供将插入日志中的信息?我找不到有关该主题的任何信息,因此任何帮助都会很棒,谢谢!
编辑:
搜索了 Laravel 日志编写器源代码。发现名为 Illuminate.log
的所有日志事件都会触发一个事件,然后由编写器捕获。
https://github.com/laravel/framework/blob/5.1/src/Illuminate/Log/Writer.php#L295
当抛出异常时,会创建一个日志条目,但发生这种情况时似乎并未调度事件。只有当您显式调用日志时才会调度事件。例如,其输出为日志已写入
:
Route::get('/', function () {
Event::listen('illuminate.log', function()
{
die('Log was written to');
});
Log::info('info');
throw new Exception('Exception');
});
但是,这仅显示异常:
Route::get('/', function () {
Event::listen('illuminate.log', function()
{
die('Log was written to');
});
throw new Exception('Exception');
});
我不确定这是否是一个错误?我猜不是,如果是这样的话,有人有任何关于这样做的提示吗?我只需要捕获日志被写入的时间并将信息一起保存。
最佳答案
通过 laravel 日志编写器添加独白处理程序最终成为此处的方法。我使用以下内容创建了一个 LoggerServiceProvider
:
namespace App\Providers;
use Monolog\Logger;
use Illuminate\Log\Writer;
use Illuminate\Support\ServiceProvider;
class LoggerServiceProvider extends ServiceProvider
{
/**
* Push the eloquent handler to monolog on boot.
*/
public function boot()
{
$logger = app('log');
// Make sure the logger is a Writer instance
if($logger instanceof Writer) {
$monolog = $logger->getMonolog();
// Make sure the Monolog Logger is returned
if($monolog instanceof Logger) {
// Create your custom handler
$handler = new App\Handlers\MyCustomHandler();
// Push it to monolog
$monolog->pushHandler($handler);
}
}
}
/**
* Register bindings in the container.
*/
public function register()
{
//
}
}
我建议像这样扩展 Monologs AbstractHandler
:
namespace App\Handlers\MyCustomHandler;
use Monolog\Handler\AbstractHandler;
class MyCustomHandler extends AbstractHandler
{
/**
* Handle the log record.
*
* @param array $record
*
* @return bool
*/
public function handle(array $record = [])
{
// Do something with the $record array
}
}
然后将新的服务提供商插入到您的 config/app.php
文件中。
关于Laravel 日志事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32230089/