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:
@@ -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>
|
||||||
|
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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)) {
|
||||||
|
@@ -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(),
|
||||||
|
@@ -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(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
|
@@ -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
5
tests/bootstrap.php
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
date_default_timezone_set('UTC');
|
||||||
|
|
||||||
|
require __DIR__.'/../vendor/autoload.php';
|
Reference in New Issue
Block a user