Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
26 / 26
LogServiceProvider
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
4
100.00% covered (success)
100.00%
26 / 26
 register
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
20 / 20
 anonymous function
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 boot
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
<?php
namespace Eccube\ServiceProvider;
use Eccube\EventListener\LogListener;
use Eccube\Log\Logger;
use Eccube\Log\Monolog\Helper\LogHelper;
use Silex\Application;
use Silex\ServiceProviderInterface;
/**
 * Class LogServiceProvider
 *
 * @package Eccube\ServiceProvider
 */
class LogServiceProvider implements ServiceProviderInterface
{
    public function register(Application $app)
    {
        $app->register(new \Silex\Provider\MonologServiceProvider());
        // Log
        $app['eccube.logger'] = $app->share(function ($app) {
            return new Logger($app);
        });
        // ヘルパー作成
        $app['eccube.monolog.helper'] = $app->share(function ($app) {
            return new LogHelper($app);
        });
        // ログクラス作成ファクトリー
        $app['eccube.monolog.factory'] = $app->protect(function (array $channelValues) use ($app) {
            $log = new $app['monolog.logger.class']($channelValues['name']);
            // EccubeMonologHelper内でHandlerを設定している
            $log->pushHandler($app['eccube.monolog.helper']->getHandler($channelValues));
            return $log;
        });
        // チャネルに応じてログを作成し、フロント、管理、プラグイン用のログ出力クラスを作成
        $channels = $app['config']['log']['channel'];
        // monologの設定は除外
        unset($channels['monolog']);
        foreach ($channels as $channel => $channelValues) {
            $app['monolog.logger.'.$channel] = $app->share(function ($app) use ($channelValues) {
                return $app['eccube.monolog.factory']($channelValues);
            });
        }
        // MonologServiceProviderで定義されているmonolog.handlerの置換
        $channelValues = $app['config']['log']['channel']['monolog'];
        $app['monolog.name'] = $channelValues['name'];
        $app['monolog.handler'] = $app->share(function ($app) use ($channelValues) {
            return $app['eccube.monolog.helper']->getHandler($channelValues);
        });
        $app['eccube.monolog.listener'] = $app->share(function () use ($app) {
            return new LogListener($app['eccube.logger']);
        });
        $app['listener.requestdump'] = $app->share(function ($app) {
            return new \Eccube\EventListener\RequestDumpListener($app);
        });
    }
    public function boot(Application $app)
    {
        $app['dispatcher']->addSubscriber($app['listener.requestdump']);
        $app['dispatcher']->addSubscriber($app['eccube.monolog.listener']);
    }
}