コード例 #1
0
ファイル: Text.php プロジェクト: cargomedia/cm
 public function renderContext(CM_Log_Record $record)
 {
     $context = $record->getContext();
     $user = $context->getUser();
     $httpRequest = $context->getHttpRequest();
     $extra = $context->getExtra();
     $data = [];
     if (null !== $user) {
         $data['user'] = $this->_format('id: {id}, email: {email}', ['id' => $user->getId(), 'email' => $user->getEmail()]);
     }
     if (null != $httpRequest) {
         $server = $httpRequest->getServer();
         $httpRequestText = '{type} {path} {proto}, host: {host}, ip: {ip}, referer: {referer}, user-agent: {agent}';
         $data['httpRequest'] = $this->_format($httpRequestText, ['type' => isset($server['REQUEST_METHOD']) ? $server['REQUEST_METHOD'] : '', 'path' => $httpRequest->getPath(), 'proto' => isset($server['SERVER_PROTOCOL']) ? $server['SERVER_PROTOCOL'] : '', 'host' => $httpRequest->getHost(), 'ip' => $httpRequest->getIp(), 'referer' => $httpRequest->hasHeader('referer') ? $httpRequest->getHeader('referer') : '', 'agent' => $httpRequest->getUserAgent()]);
     }
     if (!empty($extra)) {
         $data['extra'] = json_encode($extra, JSON_PRETTY_PRINT);
     }
     if ($exception = $record->getContext()->getException()) {
         $serializableException = new CM_ExceptionHandling_SerializableException($exception);
         $data['exception'] = $this->_renderException($serializableException);
     }
     $output = empty($data) ? null : $this->_formatArrayToLines(' - %s: %s', $data);
     return $output;
 }
コード例 #2
0
ファイル: Fluentd.php プロジェクト: cargomedia/cm
 /**
  * @param CM_Log_Record $record
  * @return array
  */
 protected function _formatRecord(CM_Log_Record $record)
 {
     $levelsMapping = array_flip(CM_Log_Logger::getLevels());
     $context = $record->getContext();
     $result = ['message' => (string) $record->getMessage(), 'level' => strtolower($levelsMapping[$record->getLevel()]), 'timestamp' => $record->getCreatedAt()->format('Y-m-d\\TH:i:s.uO')];
     $result = array_merge($result, $this->_contextFormatter->formatContext($context));
     return $result;
 }
コード例 #3
0
ファイル: MongoDb.php プロジェクト: cargomedia/cm
 /**
  * @param CM_Log_Record $record
  * @return array
  */
 protected function _formatRecord(CM_Log_Record $record)
 {
     $recordContext = $record->getContext();
     $computerInfo = $recordContext->getComputerInfo();
     $user = $recordContext->getUser();
     $extra = $recordContext->getExtra();
     $request = $recordContext->getHttpRequest();
     $createdAt = $record->getCreatedAt();
     $formattedContext = [];
     if (null !== $computerInfo) {
         $formattedContext['computerInfo'] = ['fqdn' => $computerInfo->getFullyQualifiedDomainName(), 'phpVersion' => $computerInfo->getPhpVersion()];
     }
     if (!isset($extra['type'])) {
         $extra['type'] = self::DEFAULT_TYPE;
     }
     $formattedContext['extra'] = $extra;
     if (null !== $user) {
         $formattedContext['user'] = ['id' => $user->getId(), 'name' => $user->getDisplayName()];
     }
     if (null !== $request) {
         $formattedContext['httpRequest'] = ['method' => $request->getMethodName(), 'uri' => $request->getUri(), 'query' => [], 'server' => $request->getServer(), 'headers' => $request->getHeaders()];
         $formattedContext['httpRequest']['query'] = $request->findQuery();
         if ($request instanceof CM_Http_Request_Post) {
             $formattedContext['httpRequest']['body'] = $request->getBody();
         }
         $formattedContext['httpRequest']['clientId'] = $request->getClientId();
     }
     if ($exception = $recordContext->getException()) {
         $serializableException = new CM_ExceptionHandling_SerializableException($exception);
         $formattedContext['exception'] = ['class' => $serializableException->getClass(), 'message' => $serializableException->getMessage(), 'line' => $serializableException->getLine(), 'file' => $serializableException->getFile(), 'trace' => $serializableException->getTrace(), 'traceString' => $serializableException->getTraceAsString(), 'meta' => $serializableException->getMeta()];
     }
     $formattedRecord = ['level' => (int) $record->getLevel(), 'message' => (string) $record->getMessage(), 'createdAt' => $createdAt, 'context' => $formattedContext];
     if (null !== $this->_recordTtl) {
         $expireAt = clone $createdAt;
         $expireAt->add(new DateInterval('PT' . $this->_recordTtl . 'S'));
         $formattedRecord['expireAt'] = $expireAt;
     }
     $formattedRecord = $this->_sanitizeRecord($formattedRecord);
     //TODO remove after investigation
     return $formattedRecord;
 }
コード例 #4
0
ファイル: Abstract.php プロジェクト: cargomedia/cm
 /**
  * @param CM_Log_Record $record
  * @return array
  * @throws CM_Exception_Invalid
  */
 protected function _getRecordInfo(CM_Log_Record $record)
 {
     $computerInfo = $record->getContext()->getComputerInfo();
     return ['datetime' => $record->getCreatedAt()->format($this->_formatDate), 'levelname' => CM_Log_Logger::getLevelName($record->getLevel()), 'message' => $record->getMessage(), 'fqdn' => null === $computerInfo ? 'none' : $computerInfo->getFullyQualifiedDomainName(), 'phpVersion' => null === $computerInfo ? 'none' : $computerInfo->getPhpVersion()];
 }
コード例 #5
0
ファイル: Abstract.php プロジェクト: cargomedia/cm
 public function isHandling(CM_Log_Record $record)
 {
     return $record->getLevel() >= $this->getMinLevel();
 }
コード例 #6
0
ファイル: Handler.php プロジェクト: cargomedia/cm
 protected function _writeRecord(CM_Log_Record $record)
 {
     $this->_newRelicService->setNoticeError($record->getContext()->getException());
 }
コード例 #7
0
ファイル: LayeredTest.php プロジェクト: cargomedia/cm
 public function testPassingMessageDownWithSkipping()
 {
     $expectedRecord = new CM_Log_Record(CM_Log_Logger::WARNING, 'foo', new CM_Log_Context());
     $mockLogHandlerFoo = $this->mockClass('CM_Log_Handler_Abstract')->newInstance([CM_Log_Logger::ERROR]);
     $mockLogHandlerBar = $this->mockClass('CM_Log_Handler_Abstract')->newInstance([CM_Log_Logger::WARNING]);
     $mockLogHandlerBaz = $this->mockClass('CM_Log_Handler_Abstract')->newInstance([CM_Log_Logger::WARNING]);
     $assertHandlerException = function ($messageToAssert, $messageToThrow = null) {
         return function (CM_Log_Record $record) use($messageToAssert, $messageToThrow) {
             $exception = $record->getContext()->getException();
             $this->assertInstanceOf('Exception', $exception);
             $this->assertSame($messageToAssert, $exception->getMessage());
             if (null !== $messageToThrow) {
                 throw new Exception($messageToThrow);
             }
         };
     };
     $mockWriteRecordFoo = $mockLogHandlerFoo->mockMethod('_writeRecord');
     $mockWriteRecordBar = $mockLogHandlerBar->mockMethod('_writeRecord')->at(0, function (CM_Log_Record $record) use($expectedRecord) {
         $this->assertSame($expectedRecord->getLevel(), $record->getLevel());
         $this->assertSame($expectedRecord->getMessage(), $record->getMessage());
         throw new CM_Exception_Invalid('Foo Error');
     });
     $mockWriteRecordBaz = $mockLogHandlerBaz->mockMethod('_writeRecord')->at(0, function (CM_Log_Record $record) use($expectedRecord) {
         $this->assertSame($expectedRecord->getLevel(), $record->getLevel());
         $this->assertSame($expectedRecord->getMessage(), $record->getMessage());
     })->at(1, $assertHandlerException('Foo Error'));
     $logger = $this->_getLoggerMock(new CM_Log_Context(), new CM_Log_Handler_Layered([new CM_Log_Handler_Layered_Layer([$mockLogHandlerFoo, $mockLogHandlerBar]), new CM_Log_Handler_Layered_Layer([$mockLogHandlerBaz])]));
     $this->callProtectedMethod($logger, '_addRecord', [$expectedRecord]);
     $this->assertSame(0, $mockWriteRecordFoo->getCallCount());
     //foo will skip WARN record
     $this->assertSame(1, $mockWriteRecordBar->getCallCount());
     //bar will just fail
     $this->assertSame(2, $mockWriteRecordBaz->getCallCount());
     //original record + foo error msg
 }