Как добавить новый обработчик исключений в Laravel без отключения по умолчанию?

я использую караул отслеживать отслеживание исключений из приложения Laravel.

Документы Sentry говорят, что я должен использовать следующий код в моей начальной загрузке приложения для настройки клиента:

$app->configureMonologUsing(function($monolog) {
$client = new Raven_Client('your dsn');
$handler = new Monolog\Handler\RavenHandler($client);
$handler->setFormatter(new Monolog\Formatter\LineFormatter("%message% %context% %extra%\n"));
$monolog->pushHandler($handler);
});

И это прекрасно работает!

Побочным эффектом является обработчик исключений по умолчанию, который записывает исключения в файл по адресу /storage/logs/laravel.log, перестал работать после добавления нового обработчика исключений.

Как я могу сохранить оба обработчика?

ОБНОВЛЕНИЕ для Laravel 5.6+

Начиная с Laravel 5.6 доступны стеки журналов. Теперь разработчики могут легко настроить несколько каналов регистрации. Ссылаться на документы для получения дополнительной информации об этом.

4

Решение

Вы можете посмотреть на Illuminate\Foundation\Bootstrap\ConfigureLogging чтобы увидеть, как Laravel настраивает свое собственное ведение журнала. Затем в вашем собственном загрузчике просто нажмите другой обработчик, который делает то же самое:

$app->configureMonologUsing(function($monolog) {

// Keep your existing Sentry configuration
$client = new Raven_Client('your dsn');
$handler = new Monolog\Handler\RavenHandler($client);
$handler->setFormatter(new Monolog\Formatter\LineFormatter("%message% %context% %extra%\n"));
$monolog->pushHandler($handler);

// Add another handler that writes to laravel.log
$handler = new Monolog\Handler\StreamHandler(storage_path('logs/laravel.log'));
$handler->setFormatter(new Monolog\Formatter\LineFormatter(null, null, true, true));
$monolog->pushHandler($handler);

});

Редактировать:

Если вам не нужно воспроизводить поведение Ларавела именно так, вместо этого вы можете использовать форматировщик по умолчанию для добавления в одну строку:

$monolog->pushHandler(new Monolog\Handler\StreamHandler(storage_path('logs/laravel.log')));

Это отличается от собственной реализации Laravel тем, что она будет использовать аргументы конструктора по умолчанию за LineFormatter а не те, которые мы устанавливали явно раньше.

Третьим вариантом, который использует логику Laravel для настройки Monolog, будет добавление этой строки:

with(new Illuminate\Log\Writer($monolog))->useFiles(storage_path('logs/laravel.log'));
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]