Skip to content

Instantly share code, notes, and snippets.

@shirshir
Created January 14, 2014 08:39
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shirshir/8415126 to your computer and use it in GitHub Desktop.
Save shirshir/8415126 to your computer and use it in GitHub Desktop.
A Silex Service Provider to add Monolog\Handler\BufferHandler, Monolog\Handler\FingersCrossedHandler and Symfony\Bridge\Monolog\Handler\SwiftMailerHandler to email any errors. Silex\Provider\MonologServiceProvider must also be registered.
<?php
namespace App\Provider;
use Monolog\Handler\BufferHandler;
use Monolog\Handler\FingersCrossedHandler;
use Monolog\Logger;
use Silex\Application;
use Silex\ServiceProviderInterface;
use Symfony\Bridge\Monolog\Handler\SwiftMailerHandler;
use Symfony\Component\HttpKernel\Event\PostResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class ExtendedMonologServiceProvider implements ServiceProviderInterface
{
/**
* {@inheritdoc}
*/
public function register( Application $app )
{
$app['email.default_from_address'] = 'errors@yourdomain.com';
$app['logger.message_generator'] = function () use ( $app ) {
$message = \Swift_Message::newInstance();
$message
->setSubject('error report')
->setFrom($app['email.default_from_address'])
->setTo($app['email.default_from_address']);
return $message;
};
$app['logger.swift_mailer_handler'] = $app->share(function ( $app ) {
$handler = new SwiftMailerHandler($app['mailer'], $app['logger.message_generator'], Logger::DEBUG);
$handler->setTransport($app['swiftmailer.transport']);
return $handler;
});
if (!$app['debug']) {
$app['monolog'] = $app->share($app->extend('monolog',
function ( $monolog, $app ) {
/** @var $monolog Logger */
$bufferHander = new BufferHandler($app['logger.swift_mailer_handler']);
$fingersCrossedHandler = new FingersCrossedHandler($bufferHander, Logger::ERROR, 200);
$monolog->pushHandler($fingersCrossedHandler);
return $monolog;
}
));
}
}
/**
* {@inheritdoc}
*/
public function boot( Application $app )
{
$app->on(KernelEvents::TERMINATE, function ( PostResponseEvent $event ) use ( $app ) {
if ($app['mailer.initialized']) {
$app['logger.swift_mailer_handler']->onKernelTerminate($event);
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment