Snaglogger
Snaglogger is a PSR-3-compatible logger that sends log messages to Bugsnag., (*1)
Installation
Snaglogger can be added to your project via Composer:, (*2)
{
"require": {
"itafroma/snaglogger": "^2.0"
}
}
Snaglogger uses semantic versioning. In general, you can pin to ^[MAJOR].0 and be confident you will not receive breaking changes during updates., (*3)
Usage
Quickstart
Snaglogger comes with a factory that instantiates the logger with sensible defaults:, (*4)
use Itafroma\Snaglogger\LoggerFactory;
$key = 'YOUR BUGSNAG API KEY HERE';
$logger = LoggerFactory::create($key);
Once instantiated, the logger will work as any other PSR-3-compatiable logger:, (*5)
$logger->info('This is an informational message.');
$logger->error('This is an error.');
The PSR-3 context array
Snaglogger will send the contents of the $context array to Bugsnag as metadata., (*6)
Additionally, Snaglogger treats two $context keys as special:, (*7)
- If the
exception key contains an instance of an exception, Snaglogger will record the log message as an exception instead of an error.
- If the
error-type key is set, Snaglogger will use that as the error type. Otherwise, it will use the error severity.
Finally, Snaglogger will use the $context array for placeholder replacement within the log message:, (*8)
$message = 'The {location} is on fire!';
$context = ['location' => 'roof'];
// Bugsnag will record the error message as "The roof is on fire!"
$logger->error($message, $context);
Severity levels
Bugsnag only supports three severity levels: info, warning, and error. However, PSR-3 requires loggers to support eight: emergency, alert, critical, error, warning, notice, info, and debug. By default, Snaglogger maps these additional log levels to the closest Bugsnag severity level:, (*9)
- emergency → error
- alert → error
- critical → error
- error → error
- warning → warning
- notice → info
- info → info
- debug → info
Advanced usage
Some functionality can be customized by implementing certain interfaces:, (*10)
More information can be found in those interfaces' inline documentation., (*11)
You may also want to customize the Bugsnag client., (*12)
To override Snaglogger's default functionality, you will need to:, (*13)
- Implement your own concrete class of
\Itafroma\Snaglogger\LoggerFactoryInterface, and/or
- Call the
Logger constructor directly.
For example:, (*14)
$client = Client::make('API KEY')->setReleaseStage('prod');
$interpolator = new CustomMessageInterpolator();
$mapper = new CustomSeverityMapper();
$logger = new Logger($client, $interpolator, $mapper);
Contributing
Contributions are welcome! Please see the separate CONTRIBUTING file for more information., (*15)
Copyright and license
This extension is copyright Mark Trapp. All Rights Reserved. It is made available under the terms of the MIT license. A copy of the license can be found in the LICENSE file., (*16)
Disclaimer
This project has no affliation with Bugsnag in any way. Additional disclaimers can be found in the LICENSE file., (*17)