Commit 410c1ddd authored by Fabien Potencier's avatar Fabien Potencier

merged branch fabpot/monolog-as-logger (PR #331)

Commits
-------

c5e7a0b3 made monolog logger as the default logger when the monolog bridge is installed

Discussion
----------

Use Monolog as the default logger when the Symfony2 Monolog bridge is installed

#330 is a pre-requisite for this PR to be merged.
parents 14cbd6c7 c5e7a0b3
{
"hash": "d22b382f0e20509713b06e6991c82e07",
"hash": "142455bfe45755d318953c04880d43f2",
"packages": [
{
"package": "pimple/pimple",
......@@ -25,11 +25,6 @@
"version": "dev-master",
"source-reference": "6ab1b5f07dd972d2c5e3b5d48c9776d0823149c7"
},
{
"package": "symfony/class-loader",
"version": "dev-master",
"source-reference": "c57e62c886899f8d88264efad23c857eb198dc09"
},
{
"package": "symfony/class-loader",
"version": "dev-master",
......@@ -88,14 +83,14 @@
{
"package": "symfony/http-foundation",
"version": "dev-master",
"source-reference": "5b1581418381f46679604fd19efc8b518f2390ae",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
"source-reference": "5b1581418381f46679604fd19efc8b518f2390ae"
},
{
"package": "symfony/http-foundation",
"version": "dev-master",
"source-reference": "5b1581418381f46679604fd19efc8b518f2390ae"
"source-reference": "5b1581418381f46679604fd19efc8b518f2390ae",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
},
{
"package": "symfony/http-kernel",
......@@ -124,21 +119,28 @@
{
"package": "symfony/routing",
"version": "dev-master",
"source-reference": "aec133671d79d530d09aa0b5ca4cea9e4ee4b274"
"source-reference": "aec133671d79d530d09aa0b5ca4cea9e4ee4b274",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
},
{
"package": "symfony/routing",
"version": "dev-master",
"source-reference": "aec133671d79d530d09aa0b5ca4cea9e4ee4b274",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
"source-reference": "aec133671d79d530d09aa0b5ca4cea9e4ee4b274"
}
],
"packages-dev": [
{
"package": "doctrine/common",
"version": "2.2.x-dev",
"source-reference": "1e0aa60d109c630d19543d999f12e2852ef8f932"
"version": "dev-master",
"source-reference": "8b403cde97eaede30bd79acab4f18895fd5bdf27",
"alias-pretty-version": "2.3.x-dev",
"alias-version": "2.3.9999999.9999999-dev"
},
{
"package": "doctrine/common",
"version": "dev-master",
"source-reference": "8b403cde97eaede30bd79acab4f18895fd5bdf27"
},
{
"package": "doctrine/dbal",
......@@ -147,20 +149,19 @@
},
{
"package": "monolog/monolog",
"version": "dev-master",
"source-reference": "2eb0c0978d290a1c45346a1955188929cb4e5db7"
"version": "1.1.0"
},
{
"package": "symfony/form",
"version": "dev-master",
"source-reference": "f410a9e3440b1248f8941d332d9e65b80e573ec5",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
"source-reference": "f410a9e3440b1248f8941d332d9e65b80e573ec5"
},
{
"package": "symfony/form",
"version": "dev-master",
"source-reference": "f410a9e3440b1248f8941d332d9e65b80e573ec5"
"source-reference": "f410a9e3440b1248f8941d332d9e65b80e573ec5",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
},
{
"package": "symfony/locale",
......@@ -175,9 +176,14 @@
"source-reference": "6a9e36fef0eedcd52b0dde361faab38f4615fe48"
},
{
"package": "symfony/options-resolver",
"package": "symfony/monolog-bridge",
"version": "dev-master",
"source-reference": "92c19fb262283a348093bbd32b5c5dfef8f00612",
"source-reference": "7ef27aa6b88447989fe5da551c2d2746d4cf60aa"
},
{
"package": "symfony/monolog-bridge",
"version": "dev-master",
"source-reference": "7ef27aa6b88447989fe5da551c2d2746d4cf60aa",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
},
......@@ -187,9 +193,11 @@
"source-reference": "92c19fb262283a348093bbd32b5c5dfef8f00612"
},
{
"package": "symfony/translation",
"package": "symfony/options-resolver",
"version": "dev-master",
"source-reference": "f89af1b91bbb9ee9151e3516aeaf1eda7992a369"
"source-reference": "92c19fb262283a348093bbd32b5c5dfef8f00612",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
},
{
"package": "symfony/translation",
......@@ -198,6 +206,11 @@
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
},
{
"package": "symfony/translation",
"version": "dev-master",
"source-reference": "f89af1b91bbb9ee9151e3516aeaf1eda7992a369"
},
{
"package": "symfony/twig-bridge",
"version": "dev-master",
......@@ -225,7 +238,7 @@
{
"package": "twig/twig",
"version": "dev-master",
"source-reference": "e28663efd83d76ee36bf9e8a790f75bd880abbf2",
"source-reference": "45d0f6fe67e2199d1148cf1c7e832674af4e8e93",
"alias-pretty-version": "1.8.x-dev",
"alias-version": "1.8.9999999.9999999-dev"
},
......@@ -239,7 +252,7 @@
{
"package": "twig/twig",
"version": "dev-master",
"source-reference": "e28663efd83d76ee36bf9e8a790f75bd880abbf2"
"source-reference": "45d0f6fe67e2199d1148cf1c7e832674af4e8e93"
}
],
"aliases": [
......
......@@ -218,6 +218,8 @@ don't want to mess with most of them.
* **logger**: A
`http://api.symfony.com/master/Symfony/Component/HttpKernel/Log/LoggerInterface.html`_
instance. By default, logging is disabled as the value is set to `null`.
When the Symfony2 Monolog bridge is installed, Monolog is automatically used
as the default logger.
.. note::
......
......@@ -13,10 +13,8 @@ namespace Silex\Provider;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Silex\Application;
use Silex\ServiceProviderInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
......@@ -29,8 +27,16 @@ class MonologServiceProvider implements ServiceProviderInterface
{
public function register(Application $app)
{
$app['monolog'] = $app->share(function () use ($app) {
$log = new Logger(isset($app['monolog.name']) ? $app['monolog.name'] : 'myapp');
if ($bridge = class_exists('Symfony\Bridge\Monolog\Logger')) {
$app['logger'] = function () use ($app) {
return $app['monolog'];
};
}
$app['monolog'] = $app->share(function () use ($app, $bridge) {
$class = $bridge ? 'Symfony\Bridge\Monolog\Logger' : 'Monolog\Logger';
$log = new $class(isset($app['monolog.name']) ? $app['monolog.name'] : 'myapp');
$app['monolog.configure']($log);
......@@ -60,7 +66,7 @@ class MonologServiceProvider implements ServiceProviderInterface
$app->error(function (\Exception $e) use ($app) {
$app['monolog']->addError($e->getMessage());
});
}, 255);
$app->after(function (Request $request, Response $response) use ($app) {
$app['monolog']->addInfo('< '.$response->getStatusCode());
......
......@@ -12,10 +12,8 @@
namespace Silex\Tests\Provider;
use Monolog\Handler\TestHandler;
use Silex\Application;
use Silex\Provider\MonologServiceProvider;
use Symfony\Component\HttpFoundation\Request;
/**
......@@ -32,24 +30,10 @@ class MonologServiceProviderTest extends \PHPUnit_Framework_TestCase
}
}
public function testRegister()
public function testRequestLogging()
{
$app = new Application();
$app->register(new MonologServiceProvider());
$app['monolog.handler'] = $app->share(function () use ($app) {
return new TestHandler($app['monolog.level']);
});
$app = $this->getApplication();
return $app;
}
/**
* @depends testRegister
*/
public function testRequestLogging($app)
{
$app->get('/foo', function () use ($app) {
return 'foo';
});
......@@ -59,14 +43,15 @@ class MonologServiceProviderTest extends \PHPUnit_Framework_TestCase
$request = Request::create('/foo');
$app->handle($request);
$this->assertTrue($app['monolog.handler']->hasInfoRecords());
$this->assertTrue($app['monolog.handler']->hasInfo('> GET /foo'));
$this->assertTrue($app['monolog.handler']->hasInfo('< 200'));
$this->assertTrue($app['monolog.handler']->hasInfo('Matched route "GET_foo" (parameters: "_controller": "{}", "_route": "GET_foo")'));
}
/**
* @depends testRegister
*/
public function testManualLogging($app)
public function testManualLogging()
{
$app = $this->getApplication();
$app->get('/log', function () use ($app) {
$app['monolog']->addDebug('logging a message');
});
......@@ -76,14 +61,13 @@ class MonologServiceProviderTest extends \PHPUnit_Framework_TestCase
$request = Request::create('/log');
$app->handle($request);
$this->assertTrue($app['monolog.handler']->hasDebugRecords());
$this->assertTrue($app['monolog.handler']->hasDebug('logging a message'));
}
/**
* @depends testRegister
*/
public function testErrorLogging($app)
public function testErrorLogging()
{
$app = $this->getApplication();
$app->get('/error', function () {
throw new \RuntimeException('very bad error');
});
......@@ -97,6 +81,19 @@ class MonologServiceProviderTest extends \PHPUnit_Framework_TestCase
$request = Request::create('/error');
$app->handle($request);
$this->assertTrue($app['monolog.handler']->hasErrorRecords());
$this->assertTrue($app['monolog.handler']->hasError('very bad error'));
}
protected function getApplication()
{
$app = new Application();
$app->register(new MonologServiceProvider());
$app['monolog.handler'] = $app->share(function () use ($app) {
return new TestHandler($app['monolog.level']);
});
return $app;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment