я использую караул отслеживать отслеживание исключений из приложения 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 доступны стеки журналов. Теперь разработчики могут легко настроить несколько каналов регистрации. Ссылаться на документы для получения дополнительной информации об этом.
Вы можете посмотреть на 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'));
Других решений пока нет …