Configuration
The logging facilities for your application are
configured in the
Illuminate\Foundation\Bootstrap\ConfigureLogging
bootstrapper class. This class utilizees the
log
configuration option from your
config/app.php
configuration file.
By default, the logger is configured to use daily log files; however, you may customize this behavior as needed. Since Laravel uses the popular Monolog logging library, you can take advantage of the variety of handlers that Monolog offers.
For example, if you wish to use a single log file instead
of daily files, you can make the following change to
your config/app.php
configuration file:
'log' => 'single'
Out of the box, Laravel supported single
,
daily
, and syslog
logging
modes. However, you are free to customize the logging
for your application as you wish by overriding the
ConfigureLogging
bootstrapper class.
Error Detail
The amount of error detail your application displays
through the browser is controlled by the
app.debug
configuration option in your
config/app.php
configuration file. By
default, this configuration option is set to respect the
APP_DEBUG
environment variable, which is
stored in your .env
file.
For local development, you should set the
APP_DEBUG
environment variable to
true
. In your production
environment, this value should always be
false
.
Handling Errors
All exceptions are handled by the
App\Exceptions\Handler
class. This class
contains two methods: report
and
render
.
The report
method is used to log exceptions
or send them to an external service like BugSnag. By default,
the report
method simply passes the
exception to the base implementation on the parent class
where the exception is logged. However, you are free to
log exceptions however you wish. If you need to report
different types of exceptions in different ways, you may
use the PHP instanceof
comparison
operator:
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $e
* @return void
*/
public function report(Exception $e)
{
if ($e instanceof CustomException)
{
//
}
return parent::report($e);
}
The render
method is responsible for
converting the exception into an HTTP response that
should be sent back to the browser. By default, the
exception is passed to the base class which generates a
response for you. However, you are free to check the
exception type or return your own custom response.
The dontReport
property of the exception
handler contains an array of exception types that will
not be logged. By default, exceptions resulting from 404
errors are not written to your log files. You may add
other exception types to this array as needed.
HTTP Exceptions
Some exceptions describe HTTP error codes from the server. For example, this may be a "page not found" error (404), an "unauthorized error" (401) or even a developer generated 500 error. In order to return such a response, use the following:
abort(404);
Optionally, you may provide a response:
abort(403, 'Unauthorized action.');
This method may be used at any time during the request's lifecycle.
Custom 404 Error Page
To return a custom view for all 404 errors, create a
resources/views/errors/404.blade.php
file.
This view will be served on all 404 errors generated by
your application.
Logging
The Laravel logging facilities provide a simple layer on
top of the powerful Monolog
library. By default, Laravel is configured to create
daily log files for your application which are stored in
the storage/logs
directory. You may write
information to the log like so:
Log::info('This is some useful information.');
Log::warning('Something could be going wrong.');
Log::error('Something is really going wrong.');
The logger provides the seven logging levels defined in RFC 5424: debug, info, notice, warning, error, critical, and alert.
An array of contextual data may also be passed to the log methods:
Log::info('Log message', ['context' => 'Other helpful information']);
Monolog has a variety of additional handlers you may use for logging. If needed, you may access the underlying Monolog instance being used by Laravel:
$monolog = Log::getMonolog();
You may also register an event to catch all messages passed to the log:
Registering A Log Event Listener
Log::listen(function($level, $message, $context)
{
//
});