2015-08-23 2 views
7

Я использую Laravel 5.1 и пытаюсь установить различные логики регистрации для среды разработки и производства.Laravel 5 разных уровней регистрации для разработки и производства

На протяжении моего приложения я использую Log фасад с большинством из следующих различных способов:

Log::emergency($error); 
Log::alert($error); 
Log::critical($error); 
Log::error($error); 
Log::warning($error); 
Log::notice($error); 
Log::info($error); 
Log::debug($error); 

Однако, в моей среде, я хотел бы что-нибудь, что является Error, Critical, Alert войти только или Emergency приоритет и игнорировать запросы журнала с более низким приоритетом.

Я ничего не нашел в документации или изучил код (как Log фасад, так и класс Monolog).

Моя нынешняя мысль заключается в создании пользовательской обертки вокруг фасада журнала, который просто проверяет среду и игнорирует что-либо ниже 400 (уровень Монологи для ошибки). В принципе, я бы создал пороговую переменную в файле среды, и все, что находится ниже, просто не будет регистрироваться в файлах.

Прежде чем я это сделаю, я хотел спросить сообщество, существует ли существующий метод/конфигурация для того, что я мог бы использовать, чтобы я не изобретал колесо.

Если нет - какой был бы лучший подход?

+0

Какой логин вы используете? «single», «daily», «syslog» или «errorlog»? К сожалению решение зависит от используемого регистратора. –

+0

@ jedrzej.kurylo Я использую 'Daily' – Yani

ответ

4

Этот gist показывает более удобный ответ, так как он не зависит от выбранного обработчика .

Я просто предоставляю существенную часть ответа здесь, если вышеупомянутая ссылка удаляется через некоторое время.

В методе зарегистрировать AppServiceProviders':

/** 
* Register any application services. 
* 
* @return void 
*/ 
public function register() 
{ 
    // 
    $monolog = Log::getMonolog(); 
    foreach($monolog->getHandlers() as $handler) { 
     $handler->setLevel(Config::get('app.log-level')); 
    } 
} 

Затем просто добавить дополнительный ключ к вашей конфигурации/приложения.php:

'log-level' => 'info', // or whatever minimum log level you would like. 
2

Добавьте следующий код в AppServiceProvider :: регистр():

$this->app->configureMonologUsing(function ($monolog) { 
    $monolog->pushHandler(
    $handler = new RotatingFileHandler(
     $this->app->storagePath() . '/logs/laravel.log', 
     $this->app->make('config')->get('app.log_max_files', 5), 
     $this->app->make('config')->get('app.level', 'debug') 
    ) 
); 

    $handler->setFormatter(new LineFormatter(null, null, true, true)); 
}); 

Это воссоздает логику, которая Laravel делает при настройке ежедневно обработчика, но добавляет прохождение уровня в обработчик.

Вы можете установить минимальный уровень ведения журнала, установив значениеуровня в вашем конфигурации/app.php:

'level' => 'debug', //debug, info, notice, warning, error, critical, alert, emergency 

Это немного обходной путь, и каждый тип обработчика должен был бы быть настраивается отдельно. В настоящее время я работаю над pull-request до Laravel, который добавит минимальный уровень отладки установки из файла конфигурации без написания строки кода в вашем AppServiceProvider.

Код не был протестирован, поэтому дайте мне знать, если вы видите какие-либо опечатки или что-то не работает должным образом, и я буду более чем счастлив сделать эту работу за вас.

+0

Существует проблема с протоколом L5 (в Linux) в том, что если вы запускаете' artisan' из командной строки **, а не ** в качестве * веб-пользователя *, может быть создан файл журнала, который не может быть записан веб-сервером *. Я подал запрос на перенос, исправляя проблему, но мне сказали использовать вместо этого configureMonologUsing(). Так что будьте в курсе и 'chmod' ваши файлы журналов там тоже. ;) – lucifurious

Смежные вопросы