1
0
mirror of https://github.com/Seldaek/monolog.git synced 2025-08-07 21:56:31 +02:00

Support ext-mongodb's UTCDateTime class in MongoDBFormatter

The legacy driver (i.e. ext-mongo) and MongoDate are not supported on PHP 7.
This commit is contained in:
Jeremy Mikola
2016-01-21 16:22:47 -05:00
parent aa6ab660bd
commit f585e714fc
2 changed files with 24 additions and 14 deletions

View File

@@ -11,6 +11,8 @@
namespace Monolog\Formatter; namespace Monolog\Formatter;
use MongoDB\BSON\UTCDateTime;
/** /**
* Formats a record for use with the MongoDBHandler. * Formats a record for use with the MongoDBHandler.
* *
@@ -100,6 +102,13 @@ class MongoDBFormatter implements FormatterInterface
protected function formatDate(\DateTime $value, $nestingLevel) protected function formatDate(\DateTime $value, $nestingLevel)
{ {
return new \MongoDate($value->getTimestamp()); $seconds = (int) $value->format('U');
$milliseconds = (int) $value->format('u') / 1000;
if ($seconds < 0) {
return new UTCDateTime($seconds * 1000 - $milliseconds);
} else {
return new UTCDateTime($seconds * 1000 + $milliseconds);
}
} }
} }

View File

@@ -20,8 +20,8 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase
{ {
public function setUp() public function setUp()
{ {
if (!class_exists('MongoDate')) { if (!class_exists('MongoDB\BSON\UTCDateTime')) {
$this->markTestSkipped('mongo extension not installed'); $this->markTestSkipped('ext-mongodb not installed');
} }
} }
@@ -62,7 +62,7 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase
'level' => Logger::WARNING, 'level' => Logger::WARNING,
'level_name' => Logger::getLevelName(Logger::WARNING), 'level_name' => Logger::getLevelName(Logger::WARNING),
'channel' => 'test', 'channel' => 'test',
'datetime' => new \DateTime('2014-02-01 00:00:00'), 'datetime' => new \DateTime('2016-01-21T21:11:30.123456+00:00'),
'extra' => array(), 'extra' => array(),
); );
@@ -75,8 +75,8 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase
$this->assertEquals(Logger::WARNING, $formattedRecord['level']); $this->assertEquals(Logger::WARNING, $formattedRecord['level']);
$this->assertEquals(Logger::getLevelName(Logger::WARNING), $formattedRecord['level_name']); $this->assertEquals(Logger::getLevelName(Logger::WARNING), $formattedRecord['level_name']);
$this->assertEquals('test', $formattedRecord['channel']); $this->assertEquals('test', $formattedRecord['channel']);
$this->assertInstanceOf('\MongoDate', $formattedRecord['datetime']); $this->assertInstanceOf('MongoDB\BSON\UTCDateTime', $formattedRecord['datetime']);
$this->assertEquals('0.00000000 1391212800', $formattedRecord['datetime']->__toString()); $this->assertEquals('1453410690123', $formattedRecord['datetime']->__toString());
$this->assertEquals(array(), $formattedRecord['extra']); $this->assertEquals(array(), $formattedRecord['extra']);
} }
@@ -89,7 +89,7 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase
$record = array( $record = array(
'message' => 'some log message', 'message' => 'some log message',
'context' => array( 'context' => array(
'stuff' => new \DateTime('2014-02-01 02:31:33'), 'stuff' => new \DateTime('1969-01-21T21:11:30.123456+00:00'),
'some_object' => $someObject, 'some_object' => $someObject,
'context_string' => 'some string', 'context_string' => 'some string',
'context_int' => 123456, 'context_int' => 123456,
@@ -98,7 +98,7 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase
'level' => Logger::WARNING, 'level' => Logger::WARNING,
'level_name' => Logger::getLevelName(Logger::WARNING), 'level_name' => Logger::getLevelName(Logger::WARNING),
'channel' => 'test', 'channel' => 'test',
'datetime' => new \DateTime('2014-02-01 00:00:00'), 'datetime' => new \DateTime('2016-01-21T21:11:30.123456+00:00'),
'extra' => array(), 'extra' => array(),
); );
@@ -106,8 +106,9 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase
$formattedRecord = $formatter->format($record); $formattedRecord = $formatter->format($record);
$this->assertCount(5, $formattedRecord['context']); $this->assertCount(5, $formattedRecord['context']);
$this->assertInstanceOf('\MongoDate', $formattedRecord['context']['stuff']); $this->assertInstanceOf('MongoDB\BSON\UTCDateTime', $formattedRecord['context']['stuff']);
$this->assertEquals('0.00000000 1391221893', $formattedRecord['context']['stuff']->__toString()); $this->assertEquals('-29731710123', $formattedRecord['context']['stuff']->__toString());
$this->assertEquals( $this->assertEquals(
array( array(
'foo' => 'something', 'foo' => 'something',
@@ -144,7 +145,7 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase
'level' => Logger::WARNING, 'level' => Logger::WARNING,
'level_name' => Logger::getLevelName(Logger::WARNING), 'level_name' => Logger::getLevelName(Logger::WARNING),
'channel' => 'test', 'channel' => 'test',
'datetime' => new \DateTime('2014-02-01 00:00:00'), 'datetime' => new \DateTime('2016-01-21T21:11:30.123456+00:00'),
'extra' => array(), 'extra' => array(),
); );
@@ -180,7 +181,7 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase
'level' => Logger::WARNING, 'level' => Logger::WARNING,
'level_name' => Logger::getLevelName(Logger::WARNING), 'level_name' => Logger::getLevelName(Logger::WARNING),
'channel' => 'test', 'channel' => 'test',
'datetime' => new \DateTime('2014-02-01 00:00:00'), 'datetime' => new \DateTime('2016-01-21T21:11:30.123456+00:00'),
'extra' => array(), 'extra' => array(),
); );
@@ -219,7 +220,7 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase
'level' => Logger::WARNING, 'level' => Logger::WARNING,
'level_name' => Logger::getLevelName(Logger::WARNING), 'level_name' => Logger::getLevelName(Logger::WARNING),
'channel' => 'test', 'channel' => 'test',
'datetime' => new \DateTime('2014-02-01 00:00:00'), 'datetime' => new \DateTime('2016-01-21T21:11:30.123456+00:00'),
'extra' => array(), 'extra' => array(),
); );
@@ -248,7 +249,7 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase
'level' => Logger::WARNING, 'level' => Logger::WARNING,
'level_name' => Logger::getLevelName(Logger::WARNING), 'level_name' => Logger::getLevelName(Logger::WARNING),
'channel' => 'test', 'channel' => 'test',
'datetime' => new \DateTime('2014-02-01 00:00:00'), 'datetime' => new \DateTime('2016-01-21T21:11:30.123456+00:00'),
'extra' => array(), 'extra' => array(),
); );