/** * {@inheritDoc} */ public function register(Container $container) { // Append custom settings with missing params from default settings $container['settings']['logger'] = self::mergeWithDefaultSettings($container['settings']['logger']); /** * Add dependency (DI). * * @param Container $c * * @return Logger */ $container['logger'] = function (Container $c) { $settings = $c['settings']['logger']; $loggerFormat = "[%datetime%] %level_name% %message% %context% %extra%\n"; $loggerTimeFormat = "Y-m-d H:i:s"; $loggerTimeZone = new DateTimeZone('Europe/Berlin'); $logger = new Logger($settings['name']); if ($settings['color']) { $logger->pushProcessor(new ConsoleColorProcessor()); } $logger->pushProcessor(new CleanupProcessor($settings['trimPaths'])); $logger->pushProcessor(new IntrospectionProcessor(Logger::WARNING)); $logger->pushProcessor(new ProcessIdProcessor()); $logger->pushProcessor(new PsrLogMessageProcessor()); $logger->setTimezone($loggerTimeZone); $logger->useMicrosecondTimestamps(false); // Using microseconds is buggy (2016-08-04) $formatter = new LineFormatter($loggerFormat, $loggerTimeFormat); $formatter->ignoreEmptyContextAndExtra(true); $defaultHandler = new StreamHandler('php://stdout', $settings['level'], $bubble = false); $defaultHandler->setFormatter($formatter); $logger->pushHandler($defaultHandler); $errorHandler = new StreamHandler('php://stderr', Logger::ERROR, $bubble = false); $errorHandler->setFormatter($formatter); $logger->pushHandler($errorHandler); // Register logger as default PHP error, exception and shutdown handler // Note: Make sure only this handler handles errors (set $callPrevious to false) $errorHandler = ErrorHandler::register($logger, $errorLevelMap = false, $exceptionLevelMap = false); $errorHandler->registerErrorHandler($levelMap = [], $callPrevious = false); $errorHandler->registerExceptionHandler($levelMap = [], $callPrevious = false); return $logger; }; }
public function addDebugLogger(Logger $logger, SymfonyStyle $output) { $lineFormatter = new LineFormatter("[%datetime%] %channel%.%level_name%: %message%\n"); $lineFormatter->allowInlineLineBreaks(true); $lineFormatter->ignoreEmptyContextAndExtra(true); $stdoutHandler = new PsrHandler(new ConsoleLogger($output)); $stdoutHandler->setFormatter($lineFormatter); $logger->pushHandler($stdoutHandler); }
/** * @param array $formatterConfig * * @return Monolog\Formatter\LineFormatter */ private function _createLine(array $formatterConfig) { $boolValues = array('true' => true, 'false' => false); $format = null; if (true === array_key_exists('format', $formatterConfig)) { $format = $formatterConfig['format']; } $dateFormat = null; if (true === array_key_exists('dateFormat', $formatterConfig)) { $dateFormat = $formatterConfig['dateFormat']; } $includeStacktraces = false; if (true === array_key_exists('includeStacktraces', $formatterConfig) && true === array_key_exists($formatterConfig['includeStacktraces'], $boolValues)) { $includeStacktraces = $boolValues[$formatterConfig['includeStacktraces']]; } $allowInlineLineBreaks = false; if (true === array_key_exists('allowInlineLineBreaks', $formatterConfig) && true === array_key_exists($formatterConfig['allowInlineLineBreaks'], $boolValues)) { $allowInlineLineBreaks = $boolValues[$formatterConfig['allowInlineLineBreaks']]; } $ignoreEmptyContextAndExtra = false; if (true === array_key_exists('ignoreEmptyContextAndExtra', $formatterConfig) && true === array_key_exists($formatterConfig['ignoreEmptyContextAndExtra'], $boolValues)) { $ignoreEmptyContextAndExtra = $boolValues[$formatterConfig['ignoreEmptyContextAndExtra']]; } $formatter = new Monolog\Formatter\LineFormatter($format, $dateFormat); $formatter->includeStacktraces($includeStacktraces); $formatter->allowInlineLineBreaks($allowInlineLineBreaks); $formatter->ignoreEmptyContextAndExtra($ignoreEmptyContextAndExtra); return $formatter; }