コード例 #1
0
ファイル: Module.php プロジェクト: Keanor/zf2-logger
 /**
  * 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());
     }
 }
コード例 #2
0
 /**
  * @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);
 }
コード例 #3
0
ファイル: Module.php プロジェクト: jonathan1212/zf2
 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));
         }
     });
 }
コード例 #4
0
ファイル: Module.php プロジェクト: savez/zf-operation-log
 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);
     });
 }
コード例 #5
0
ファイル: Module.php プロジェクト: coogle/logger
 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);
     });
 }
コード例 #6
0
ファイル: Module.php プロジェクト: onjanirina/kandra
 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.');
 }
コード例 #7
0
 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;
 }
コード例 #8
0
ファイル: Module.php プロジェクト: jonathan1212/zf2
 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));
         }
     });
 }
コード例 #9
0
ファイル: LoggerTest.php プロジェクト: rajanlamic/IntTest
 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');
     }
 }
コード例 #10
0
ファイル: ExceptionLogger.php プロジェクト: samsonasik/LosLog
 /**
  * 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());
 }