/** * @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; }
/** * @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()]; }
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 }
/** * @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; }