1
0
mirror of https://github.com/Seldaek/monolog.git synced 2025-07-29 17:30:14 +02:00

Set default date format to have a timezone, fixes #196

This commit is contained in:
Jordi Boggiano
2016-05-26 17:39:41 +01:00
parent 912d813c73
commit 76a91c6722
8 changed files with 27 additions and 14 deletions

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php" colors="true"> <phpunit bootstrap="tests/bootstrap.php" colors="true">
<testsuites> <testsuites>
<testsuite name="Monolog Test Suite"> <testsuite name="Monolog Test Suite">
<directory>tests/Monolog/</directory> <directory>tests/Monolog/</directory>

View File

@@ -34,10 +34,7 @@ class DateTimeImmutable extends \DateTimeImmutable implements \JsonSerializable
$this->useMicroseconds = $useMicroseconds; $this->useMicroseconds = $useMicroseconds;
} }
/** public function jsonSerialize(): string
* @return string
*/
public function jsonSerialize()
{ {
if ($this->useMicroseconds) { if ($this->useMicroseconds) {
return $this->format('Y-m-d\TH:i:s.uP'); return $this->format('Y-m-d\TH:i:s.uP');
@@ -45,4 +42,9 @@ class DateTimeImmutable extends \DateTimeImmutable implements \JsonSerializable
return $this->format('Y-m-d\TH:i:sP'); return $this->format('Y-m-d\TH:i:sP');
} }
public function __toString(): string
{
return $this->jsonSerialize();
}
} }

View File

@@ -12,6 +12,7 @@
namespace Monolog\Formatter; namespace Monolog\Formatter;
use Throwable; use Throwable;
use Monolog\DateTimeImmutable;
/** /**
* Normalizes incoming records to remove objects/resources so it's easier to dump to various targets * Normalizes incoming records to remove objects/resources so it's easier to dump to various targets
@@ -20,7 +21,7 @@ use Throwable;
*/ */
class NormalizerFormatter implements FormatterInterface class NormalizerFormatter implements FormatterInterface
{ {
const SIMPLE_DATE = "Y-m-d H:i:s"; const SIMPLE_DATE = "Y-m-d\TH:i:sP";
protected $dateFormat; protected $dateFormat;
@@ -29,7 +30,7 @@ class NormalizerFormatter implements FormatterInterface
*/ */
public function __construct($dateFormat = null) public function __construct($dateFormat = null)
{ {
$this->dateFormat = $dateFormat ?: static::SIMPLE_DATE; $this->dateFormat = $dateFormat;
if (!function_exists('json_encode')) { if (!function_exists('json_encode')) {
throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter'); throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter');
} }
@@ -86,7 +87,10 @@ class NormalizerFormatter implements FormatterInterface
} }
if ($data instanceof \DateTimeInterface) { if ($data instanceof \DateTimeInterface) {
return $data->format($this->dateFormat); if ($data instanceof DateTimeImmutable) {
return (string) $data;
}
return $data->format($this->dateFormat ?: static::SIMPLE_DATE);
} }
if (is_object($data)) { if (is_object($data)) {

View File

@@ -11,6 +11,8 @@
namespace Monolog\Formatter; namespace Monolog\Formatter;
use Monolog\DateTimeImmutable;
class ScalarFormatterTest extends \PHPUnit_Framework_TestCase class ScalarFormatterTest extends \PHPUnit_Framework_TestCase
{ {
private $formatter; private $formatter;
@@ -49,7 +51,7 @@ class ScalarFormatterTest extends \PHPUnit_Framework_TestCase
'baz' => false, 'baz' => false,
'bam' => array(1, 2, 3), 'bam' => array(1, 2, 3),
'bat' => array('foo' => 'bar'), 'bat' => array('foo' => 'bar'),
'bap' => \DateTimeImmutable::createFromFormat(\DateTime::ISO8601, '1970-01-01T00:00:00+0000'), 'bap' => $dt = new DateTimeImmutable(true),
'ban' => $exception, 'ban' => $exception,
)); ));
@@ -59,7 +61,7 @@ class ScalarFormatterTest extends \PHPUnit_Framework_TestCase
'baz' => false, 'baz' => false,
'bam' => $this->encodeJson(array(1, 2, 3)), 'bam' => $this->encodeJson(array(1, 2, 3)),
'bat' => $this->encodeJson(array('foo' => 'bar')), 'bat' => $this->encodeJson(array('foo' => 'bar')),
'bap' => '1970-01-01 00:00:00', 'bap' => (string) $dt,
'ban' => $this->encodeJson(array( 'ban' => $this->encodeJson(array(
'class' => get_class($exception), 'class' => get_class($exception),
'message' => $exception->getMessage(), 'message' => $exception->getMessage(),

View File

@@ -38,7 +38,7 @@ class DoctrineCouchDBHandlerTest extends TestCase
'level' => Logger::WARNING, 'level' => Logger::WARNING,
'level_name' => 'WARNING', 'level_name' => 'WARNING',
'channel' => 'test', 'channel' => 'test',
'datetime' => $record['datetime']->format('Y-m-d H:i:s'), 'datetime' => (string) $record['datetime'],
'extra' => array(), 'extra' => array(),
); );

View File

@@ -37,7 +37,7 @@ class LogEntriesHandlerTest extends TestCase
fseek($this->res, 0); fseek($this->res, 0);
$content = fread($this->res, 1024); $content = fread($this->res, 1024);
$this->assertRegexp('/testToken \[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\] test.CRITICAL: Critical write test/', $content); $this->assertRegexp('/testToken \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}\+00:00\] test.CRITICAL: Critical write test/', $content);
} }
public function testWriteBatchContent() public function testWriteBatchContent()
@@ -53,7 +53,7 @@ class LogEntriesHandlerTest extends TestCase
fseek($this->res, 0); fseek($this->res, 0);
$content = fread($this->res, 1024); $content = fread($this->res, 1024);
$this->assertRegexp('/(testToken \[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\] .* \[\] \[\]\n){3}/', $content); $this->assertRegexp('/(testToken \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}\+00:00\] .* \[\] \[\]\n){3}/', $content);
} }
private function createHandler() private function createHandler()

View File

@@ -64,7 +64,7 @@ class MailHandlerTest extends TestCase
$record = $this->getRecord(); $record = $this->getRecord();
$records = array($record); $records = array($record);
$records[0]['formatted'] = '['.$record['datetime']->format('Y-m-d H:i:s').'] test.WARNING: test [] []'."\n"; $records[0]['formatted'] = '['.$record['datetime'].'] test.WARNING: test [] []'."\n";
$handler->expects($this->once()) $handler->expects($this->once())
->method('send') ->method('send')

5
tests/bootstrap.php Normal file
View File

@@ -0,0 +1,5 @@
<?php
date_default_timezone_set('UTC');
require __DIR__.'/../vendor/autoload.php';