Laravel 5 different log levels for development and production

dev7 picture dev7 · Aug 23, 2015 · Viewed 17.1k times · Source

I'm using Laravel 5.1 and trying to set different logging logic for a development and production environment.

Throughout my application I am using the Log facade with most of the following different methods:

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

However, in my production environment, I would like to only log anything that is an Error, Critical, Alert or Emergency priority and ignore log requests with lower priority.

I couldn't find anything in the documentation or by exploring the code (both Log facade and the Monolog class).

My current thought is to create a custom wrapper around the Log facade that simply checks the environment and ignores anything below 400 (Monolog level for Error). Basically I would create a threshold variable in the environment file and anything below it will simply not be logged to the files.

Before I do so, I wanted to ask the community if there is an existing method/configuration for that which I could use, so that I don't re-invent the wheel.

If not - what would be the best approach?

Answer

shock_gone_wild picture shock_gone_wild · Dec 4, 2015

This gist shows a more comfortable answer, as is not dependent on the chosen handler.

I'm just providing the essential part in an answer here in case the above link gets deleted in some time.

In the AppServiceProviders' register method:

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

Then just add an additional key to your config/app.php:

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