/** * @param LoggerFactory $factory * @param string $appName * @param bool $debug */ public static function attachNewRelic(LoggerFactory $factory, $appName, $debug) { if (true === $debug || !extension_loaded('newrelic')) { return; } $newRelicHandler = new NewRelicHandler(\Monolog\Logger::ERROR, true, $appName, true); $factory->addHandler($newRelicHandler); $factory->getLogger('app')->pushHandler($newRelicHandler); }
/** * @param Request $request * @param Response $response */ public function terminate(Request $request, Response $response) { $logger = $this->loggerFactory->create('app.request'); $routeName = $request->attributes->get('_route'); $logger->notice(sprintf('Route %s matched', $routeName), array('route' => $routeName, 'response_code' => $response->getStatusCode(), 'response_size' => strlen($response->getContent()))); $this->loggerFactory->flushBuffer(); if ($this->app instanceof TerminableInterface) { $this->app->terminate($request, $response); } }
/** * @param Request $request * @param int $type * @param bool $catch * * @return Response|void */ public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true) { if ($type === HttpKernelInterface::SUB_REQUEST) { if ($request->attributes->get('exception') instanceof \Exception) { $e = $request->attributes->get('exception'); $this->newRelic->noticeError($e->getMessage(), $e); } return $this->app->handle($request, $type, $catch); } foreach ($this->loggerFactory->getTags() as $name => $value) { $this->newRelic->addCustomParameter($name, $value); } $this->newRelic->addCustomParameter('url', $request->getPathInfo()); $this->newRelic->addCustomParameter('content_type', $request->getContentType()); $routeName = $request->attributes->get('_route'); if (null !== $routeName) { $routeName = explode('.', $routeName); $this->newRelic->nameTransaction($routeName[0]); } $response = $this->app->handle($request, $type, $catch); $this->newRelic->addCustomParameter('result_code', $response->getStatusCode()); return $response; }
/** * @return ContainerInterface */ public function startContainer() { if (true === $this->isStarted()) { return $this->container; } $configAsArray = iterator_to_array($this->config->getIterator()); $this->internalConfig['parameters'] = $configAsArray; $this->container = $this->createContainer(new ArrayConfig($this->internalConfig)); $loggerFactory = new LoggerFactory($this->config->get('debug'), $this->config->get('log_dir')); $this->container->bind('LoggerFactory', $loggerFactory); if (null !== $this->router) { // Keep compatibility, use the right type hint in the application as usual (UrlGeneratorInterface, UrlMatcherInterface) $this->container->bind('UrlMatcher', $this->router->getUrlMatcher()); $this->container->bind('UrlGenerator', $this->router->getUrlGenerator()); $this->container->bind('RouteCollection', $this->router->getRouteCollection()); } $this->container->bind('AppLogger', $this->loggerFactory->getLogger('app')); $this->started = true; return $this->container; }