function(ContainerInterface $container) { return new Monolog\Processor\WebProcessor(null, [ 'HTTP_X_FORWARDED_FOR', 'HTTP_CLIENT_IP', 'HTTP_X_CLIENT_IP', 'HTTP_X_REAL_IP', 'REMOTE_ADDR', 'REMOTE_HOST', ]); }, Monolog\Formatter\LineFormatter::class => function(ContainerInterface $container) { return (new Monolog\Formatter\LineFormatter(null, null, false, false, true)) ->setBasePath('/code/'); }, 'baseMonologProcessors' => function(ContainerInterface $container) { return [ $container->get(Monolog\Processor\IntrospectionProcessor::class), $container->get(Monolog\Processor\WebProcessor::class), $container->get(Monolog\Processor\MemoryUsageProcessor::class), $container->get(Monolog\Processor\MemoryPeakUsageProcessor::class), $container->get(Monolog\Processor\PsrLogMessageProcessor::class), $container->get(Monolog\Processor\UidProcessor::class), ]; }, 'baseDefaultHandlers' => function(ContainerInterface $container) { return [ 'critical' => [ 'handler' => Monolog\Handler\RotatingFileHandler::class, 'filename' => 'critical.log', 'levels' => Monolog\Level::Critical ], 'error' => [ 'handler' => Monolog\Handler\RotatingFileHandler::class, 'filename' => 'error.log', 'levels' => [Monolog\Level::Error, Monolog\Level::Error], ], 'notices' => [ 'handler' => Incoviba\Common\Implement\Log\Handler\MySQL::class, 'levels' => [Monolog\Level::Notice, Monolog\Level::Warning] ], 'debug' => [ 'handler' => Monolog\Handler\RedisHandler::class, 'name' => 'notices', 'levels' => [Monolog\Level::Debug, Monolog\Level::Info] ], ]; }, 'developmentHandlers' => function(ContainerInterface $container) { $baseHandlers = $container->get('baseDefaultHandlers'); $baseHandlers['critical']['handler'] = Monolog\Handler\StreamHandler::class; $baseHandlers['error']['handler'] = Monolog\Handler\StreamHandler::class; $baseHandlers['notices']['handler'] = Monolog\Handler\StreamHandler::class; $baseHandlers['notices']['filename'] = 'notices.log'; $baseHandlers['debug']['handler'] = Monolog\Handler\StreamHandler::class; $baseHandlers['debug']['filename'] = 'debug.log'; return $baseHandlers; }, 'defaultMonologHandlers' => function(ContainerInterface $container) { $key = 'baseDefault'; if ($container->has('ENVIRONMENT') and $container->get('ENVIRONMENT') === 'development') { $key = 'development'; if (!$container->has("{$key}Handlers")) { $key = 'baseDefault'; } } $baseHandlers = $container->get("{$key}Handlers"); $builder = $container->get(Incoviba\Common\Implement\Log\Processor\ArrayBuilder::class); return $builder->build($baseHandlers); }, Psr\Log\LoggerInterface::class => function(ContainerInterface $container) { return new Monolog\Logger('incoviba', $container->get('defaultMonologHandlers'), [$container->get(Incoviba\Common\Implement\Log\Processor\User::class)] + $container->get('baseMonologProcessors'), $container->get(DateTimeZone::class) ); }, 'jsonHandlers' => function(ContainerInterface $container) { $baseHandlers = $container->get('baseDefaultHandlers'); $baseHandlers['debug']['handler'] = Monolog\Handler\RotatingFileHandler::class; $baseHandlers['debug']['filename'] = 'info.json'; $baseHandlers['debug']['formatter'] = Monolog\Formatter\JsonFormatter::class; $baseHandlers['notices']['handler'] = Monolog\Handler\RotatingFileHandler::class; $baseHandlers['notices']['filename'] = 'notices.json'; $baseHandlers['notices']['formatter'] = Monolog\Formatter\JsonFormatter::class; return $baseHandlers; }, 'jsonLogger' => function(ContainerInterface $container) { $builder = $container->get(Incoviba\Common\Implement\Log\Processor\ArrayBuilder::class); $handlers = $builder->build($container->get('jsonHandlers')); return new Monolog\Logger('json', $handlers, [$container->get(Incoviba\Common\Implement\Log\Processor\User::class)] + $container->get('baseMonologProcessors'), $container->get(DateTimeZone::class) ); }, 'loginLogger' => function(ContainerInterface $container) { return new Monolog\Logger('login', [ new Monolog\Handler\RedisHandler($container->get(Predis\ClientInterface::class), 'logs:login'), ], $container->get('baseMonologProcessors'), $container->get(DateTimeZone::class) ); }, 'accessLogger' => function(ContainerInterface $container) { return new Monolog\Logger('access', [ new Monolog\Handler\RedisHandler($container->get(Predis\ClientInterface::class), 'logs:access'), ], $container->get('baseMonologProcessors'), $container->get(DateTimeZone::class) ); }, 'externalHandlers' => function(ContainerInterface $container) { return [ 'critical' => [ 'handler' => Monolog\Handler\RedisHandler::class, 'name' => 'external:critical', 'levels' => Monolog\Level::Critical ], 'error' => [ 'handler' => Monolog\Handler\RedisHandler::class, 'name' => 'external:error', 'levels' => [Monolog\Level::Error, Monolog\Level::Error], ], 'notices' => [ 'handler' => Monolog\Handler\RedisHandler::class, 'name' => 'external:notices', 'levels' => [Monolog\Level::Notice, Monolog\Level::Warning], ], 'debug' => [ 'handler' => Monolog\Handler\RedisHandler::class, 'name' => 'external:debug', 'levels' => [Monolog\Level::Debug, Monolog\Level::Info], ], ]; }, 'externalLogger' => function(ContainerInterface $container) { $builder = $container->get(Incoviba\Common\Implement\Log\Processor\ArrayBuilder::class); $handlers = $builder->build($container->get('externalHandlers')); return new Monolog\Logger('external', $handlers, $container->get('baseMonologProcessors'), $container->get(DateTimeZone::class) ); }, ];