/** * Handle php errors and Zf2 Mvc errors * * @param MvcEvent $e */ public function onBootstrap(MvcEvent $e) { $eventManager = $e->getApplication()->getEventManager(); /** @var ModuleOptions $moduleOptions */ $moduleOptions = $e->getApplication()->getServiceManager()->get('Zf2LoggerOptions'); /** @var LoggerService $loggerService */ $loggerService = $e->getApplication()->getServiceManager()->get('Zf2LoggerService'); if ($moduleOptions->isLogMvcErrors()) { // Handle zf2 dispatch error $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, [$loggerService, 'errorEventHandler']); // Handle zf2 render error $eventManager->attach(MvcEvent::EVENT_RENDER_ERROR, [$loggerService, 'errorEventHandler']); } if ($moduleOptions->isLogPhpErrors()) { Logger::registerExceptionHandler($loggerService->getLogger()); set_error_handler(function ($severity, $message, $file, $line) { if (!(error_reporting() & $severity)) { return; } throw new \ErrorException($message, 0, $severity, $file, $line); }); } if ($moduleOptions->isRegisterShutdownFunction()) { Logger::registerFatalErrorShutdownFunction($loggerService->getLogger()); } }
/** * @param Logger $logger */ public static function setLoggerExceptionHandler(Logger $logger) { if (self::$loggerExceptionHandler) { return; } $previousHandler = set_exception_handler(function () { }); Logger::registerExceptionHandler($logger); self::$loggerExceptionHandler = set_exception_handler(function () { }); Logger::unregisterExceptionHandler(); set_exception_handler($previousHandler); }
public function loggingError() { $logger = new Logger(); $logDir = dirname(dirname(__DIR__)) . '/log/error/' . date('Y-m-d'); $writer = new Stream($logDir); $logger->addWriter($writer); Logger::registerErrorHandler($logger); Logger::registerExceptionHandler($logger); register_shutdown_function(function () use($logger) { $e = error_get_last(); if ($e) { $logger->err(print_r($e, 1)); } }); }
public function onBootstrap(MvcEvent $e) { $events = StaticEventManager::getInstance(); $serviceManager = $e->getApplication()->getServiceManager(); $appConfig = $serviceManager->get('Config'); $logger = new Logger(); if (!isset($appConfig['operation_logger'])) { throw new \RuntimeException("Logger not properly configured"); } if (!isset($appConfig['operation_logger']['priority_filter'])) { throw new \RuntimeException("You must specify a 'priority_filter' config param"); } $logFilter = new PriorityFilter($appConfig['operation_logger']['priority_filter']); if (!is_null($appConfig['operation_logger']['db_adapter'])) { if (empty($appConfig['operation_logger']['logger_table'])) { throw new \RuntimeException("You must specify a 'logger_table' config param"); } $dbAdapter = $serviceManager->get($appConfig['operation_logger']['db_adapter']); if (!$dbAdapter instanceof \Zend\Db\Adapter\Adapter) { throw new \RuntimeException("Failed to load database adapter for logger"); } $tableMapping = array('timestamp' => 'event_date', 'priorityName' => 'priority', 'message' => 'event', 'extra' => array('id_operation_log' => 'id_operation_log', 'note' => 'note', 'table' => 'table_name', 'id_user' => 'id_user', 'username' => 'username', 'id_row' => 'id_row', 'field' => 'field', 'value_old' => 'value_old', 'value_new' => 'value_new', 'source' => 'source', 'uri' => 'uri', 'ip' => 'ip', 'session_id' => 'session_id')); $logWriter = new DbWriter($dbAdapter, $appConfig['operation_logger']['logger_table'], $tableMapping); $logWriter->addFilter($logFilter); $logger->addWriter($logWriter); } // nel caso si volgia fare un file LOG if (isset($appConfig['operation_logger']['log_file']) && !is_null($appConfig['operation_logger']['log_file'])) { $streamWriter = new StreamWriter($appConfig['operation_logger']['log_file']); $streamWriter->addFilter($logFilter); $logger->addWriter($streamWriter); } $request = $e->getApplication()->getRequest(); $remoteAddress = new RemoteAddress(); Logger::registerErrorHandler($logger, true); Logger::registerExceptionHandler($logger); // Attacco evento per trigger LOG! (evento: operation-log) $events->attach("*", 'operation-log', function (\Zend\EventManager\Event $e) use($logger, $request, $remoteAddress, $serviceManager) { $targetClass = get_class($e->getTarget()); $message = $e->getParam('message'); $priority = $e->getParam('priority', Logger::INFO); $zfcAuthEvents = $serviceManager->get('zfcuser_auth_service'); $idUser = $zfcAuthEvents->hasIdentity() ? $zfcAuthEvents->getIdentity()->getId() : (array_key_exists('id_user', $message) ? $message['id_user'] : '******'); $displayName = $zfcAuthEvents->hasIdentity() ? $zfcAuthEvents->getIdentity()->getDisplayName() : (array_key_exists('username', $message) ? $message['username'] : '******'); $extras = array('id_operation_log' => null, 'note' => array_key_exists('note', $message) ? $message['note'] : null, 'table_name' => array_key_exists('table', $message) ? $message['table'] : null, 'operation' => array_key_exists('operation', $message) ? $message['operation'] : null, 'id_user' => $idUser, 'username' => $displayName, 'id_row' => array_key_exists('id_row', $message) ? $message['id_row'] : null, 'field' => array_key_exists('field', $message) ? $message['field'] : null, 'value_old' => array_key_exists('value_old', $message) ? $message['value_old'] : null, 'value_new' => array_key_exists('value_new', $message) ? $message['value_new'] : null, 'source' => $targetClass, 'uri' => $request->getUriString(), 'ip' => $remoteAddress->getIpAddress(), 'session_id' => session_id()); $logger->log($priority, $message['message'], $extras); }); }
public function onBootstrap(MvcEvent $e) { $events = StaticEventManager::getInstance(); $serviceManager = $e->getApplication()->getServiceManager(); $appConfig = $serviceManager->get('Config'); $logger = new Logger(); if (!isset($appConfig['logger'])) { throw new \RuntimeException("Logger not properly configured"); } if (!isset($appConfig['logger']['priority_filter'])) { throw new \RuntimeException("You must specify a 'priority_filter' config param"); } $logFilter = new PriorityFilter($appConfig['logger']['priority_filter']); if (!is_null($appConfig['logger']['db_adapter'])) { if (empty($appConfig['logger']['logger_table'])) { throw new \RuntimeException("You must specify a 'logger_table' config param"); } $dbAdapter = $serviceManager->get($appConfig['logger']['db_adapter']); if (!$dbAdapter instanceof \Zend\Db\Adapter\Adapter) { throw new \RuntimeException("Failed to load database adapter for logger"); } $tableMapping = array('timestamp' => 'event_date', 'priorityName' => 'priority', 'message' => 'event', 'extra' => array('source' => 'source', 'uri' => 'uri', 'ip' => 'ip', 'session_id' => 'session_id')); $logWriter = new DbWriter($dbAdapter, $appConfig['logger']['logger_table'], $tableMapping); $logWriter->addFilter($logFilter); $logger->addWriter($logWriter); } if (isset($appConfig['logger']['log_file']) && !is_null($appConfig['logger']['log_file'])) { $streamWriter = new StreamWriter($appConfig['logger']['log_file']); $streamWriter->addFilter($logFilter); $logger->addWriter($streamWriter); } $request = $e->getApplication()->getRequest(); $remoteAddress = new RemoteAddress(); Logger::registerErrorHandler($logger, true); Logger::registerExceptionHandler($logger); $events->attach("*", 'log', function (\Zend\EventManager\Event $e) use($logger, $request, $remoteAddress) { $targetClass = get_class($e->getTarget()); $message = $e->getParam('message', "[No Message Provided]"); $priority = $e->getParam('priority', Logger::INFO); $extras = array('source' => $targetClass, 'uri' => $request->getUriString(), 'ip' => $remoteAddress->getIpAddress(), 'session_id' => session_id()); $logger->log($priority, $message, $extras); }); }
public function onBootstrap(MvcEvent $e) { $application = $e->getApplication(); $eventManager = $application->getEventManager(); $serviceManager = $application->getServiceManager(); // ModuleRouteListener $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); // LOGGER $writer = new \Zend\Log\Writer\Stream('php://stderr'); $logger = new Logger(); $logger->addWriter($writer); Logger::registerErrorHandler($logger); Logger::registerExceptionHandler($logger); $serviceManager->setService('logger', $logger); $logger->debug(__CLASS__ . ':' . __LINE__ . ': Registered Logger Service.'); // DB $db = new DBAdapter(array('driver' => 'Pdo_Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => '', 'database' => 'kandra_test')); $serviceManager->setService('db', $db); $logger->debug(__CLASS__ . ':' . __LINE__ . ': Registered Database Service.'); }
public function createService(ServiceLocatorInterface $serviceLocator) { $config = $serviceLocator->get('Config'); $config = isset($config['log']['ErrorLogger']['config']) ? $config['log']['ErrorLogger']['config'] : array(); if (!isset($config['stream'])) { throw new \RuntimeException('A stream must be configured for ErrorLogger.'); } $formatter = new ErrorAndExceptionHandler(array('dateTimeFormat' => 'Y-m-d H:i:s')); $writer = new Stream($config['stream']); $writer->setFormatter($formatter); $logger = new Logger(); if (!isset($config['log_errors']) || !$config['log_errors']) { $writer->addFilter(new ErrorType(ErrorType::TYPE_EXCEPTION)); } else { Logger::registerErrorHandler($logger); } if (!isset($config['log_exceptions']) || !$config['log_exceptions']) { $writer->addFilter(new ErrorType(ErrorType::TYPE_ERROR)); } else { Logger::registerExceptionHandler($logger); } $logger->addWriter($writer); return $logger; }
public function loggingError() { $logger = new Logger(); $writer = new Stream(LOG_DIR . "/error/" . date('Y-m-d')); $logger->addWriter($writer); Logger::registerErrorHandler($logger); Logger::registerExceptionHandler($logger); register_shutdown_function(function () use($logger) { $e = error_get_last(); if ($e) { $logger->err(print_r($e, 1)); } }); }
public function testExceptionHandler() { $writer = new MockWriter(); $this->logger->addWriter($writer); $this->assertTrue(Logger::registerExceptionHandler($this->logger)); // check for single error handler instance $this->assertFalse(Logger::registerExceptionHandler($this->logger)); // get the internal exception handler $exceptionHandler = set_exception_handler(function ($e) { }); set_exception_handler($exceptionHandler); // reset the exception handler Logger::unregisterExceptionHandler(); // call the exception handler $exceptionHandler(new Exception('error', 200, new Exception('previos', 100))); $exceptionHandler(new ErrorException('user notice', 1000, E_USER_NOTICE, __FILE__, __LINE__)); // check logged messages $expectedEvents = array(array('priority' => Logger::ERR, 'message' => 'previos', 'file' => __FILE__), array('priority' => Logger::ERR, 'message' => 'error', 'file' => __FILE__), array('priority' => Logger::NOTICE, 'message' => 'user notice', 'file' => __FILE__)); for ($i = 0; $i < count($expectedEvents); $i++) { $expectedEvent = $expectedEvents[$i]; $event = $writer->events[$i]; $this->assertEquals($expectedEvent['priority'], $event['priority'], 'Unexpected priority'); $this->assertEquals($expectedEvent['message'], $event['message'], 'Unexpected message'); $this->assertEquals($expectedEvent['file'], $event['extra']['file'], 'Unexpected file'); } }
/** * Registers the handlers for errors and exceptions. * * @param string $logFile * @param string $logDir */ public static function registerHandlers($logFile = 'exception.log', $logDir = 'data/logs') { $logger = AbstractLogger::generateFileLogger($logFile, $logDir); Logger::registerExceptionHandler($logger->getLogger()); }