fix:修复BUG/升级1.1.6版本
This commit is contained in:
15
vendor/monolog/monolog/CHANGELOG.md
vendored
15
vendor/monolog/monolog/CHANGELOG.md
vendored
@@ -1,3 +1,18 @@
|
||||
### 2.9.1 (2023-02-06)
|
||||
|
||||
* Fixed Logger not being serializable anymore (#1792)
|
||||
|
||||
### 2.9.0 (2023-02-05)
|
||||
|
||||
* Deprecated FlowdockHandler & Formatter as the flowdock service was shutdown (#1748)
|
||||
* Added support for enum context values in PsrLogMessageProcessor (#1773)
|
||||
* Added graylog2/gelf-php 2.x support (#1747)
|
||||
* Improved `BrowserConsoleHandler` logging to use more appropriate methods than just console.log in the browser (#1739)
|
||||
* Fixed `WhatFailureGroupHandler` not catching errors happening inside `close()` (#1791)
|
||||
* Fixed datetime field in `GoogleCloudLoggingFormatter` (#1758)
|
||||
* Fixed infinite loop detection within Fibers (#1753)
|
||||
* Fixed `AmqpHandler->setExtraAttributes` not working with buffering handler wrappers (#1781)
|
||||
|
||||
### 2.8.0 (2022-07-24)
|
||||
|
||||
* Deprecated `CubeHandler` and `PHPConsoleHandler` as both projects are abandoned and those should not be used anymore (#1734)
|
||||
|
||||
2
vendor/monolog/monolog/composer.json
vendored
2
vendor/monolog/monolog/composer.json
vendored
@@ -21,7 +21,7 @@
|
||||
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
|
||||
"doctrine/couchdb": "~1.0@dev",
|
||||
"elasticsearch/elasticsearch": "^7 || ^8",
|
||||
"graylog2/gelf-php": "^1.4.2",
|
||||
"graylog2/gelf-php": "^1.4.2 || ^2@dev",
|
||||
"guzzlehttp/guzzle": "^7.4",
|
||||
"guzzlehttp/psr7": "^2.2",
|
||||
"mongodb/mongodb": "^1.8",
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace Monolog\Formatter;
|
||||
* formats the record to be used in the FlowdockHandler
|
||||
*
|
||||
* @author Dominik Liebler <liebler.dominik@gmail.com>
|
||||
* @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4
|
||||
*/
|
||||
class FlowdockFormatter implements FormatterInterface
|
||||
{
|
||||
|
||||
@@ -47,6 +47,11 @@ class GelfMessageFormatter extends NormalizerFormatter
|
||||
*/
|
||||
protected $maxLength;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $gelfVersion = 2;
|
||||
|
||||
/**
|
||||
* Translates Monolog log levels to Graylog2 log priorities.
|
||||
*
|
||||
@@ -78,6 +83,10 @@ class GelfMessageFormatter extends NormalizerFormatter
|
||||
$this->extraPrefix = is_null($extraPrefix) ? '' : $extraPrefix;
|
||||
$this->contextPrefix = $contextPrefix;
|
||||
$this->maxLength = is_null($maxLength) ? self::DEFAULT_MAX_LENGTH : $maxLength;
|
||||
|
||||
if (method_exists(Message::class, 'setFacility')) {
|
||||
$this->gelfVersion = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -113,16 +122,20 @@ class GelfMessageFormatter extends NormalizerFormatter
|
||||
$message->setShortMessage(Utils::substr($record['message'], 0, $this->maxLength));
|
||||
}
|
||||
|
||||
if (isset($record['channel'])) {
|
||||
$message->setFacility($record['channel']);
|
||||
}
|
||||
if (isset($extra['line'])) {
|
||||
$message->setLine($extra['line']);
|
||||
unset($extra['line']);
|
||||
}
|
||||
if (isset($extra['file'])) {
|
||||
$message->setFile($extra['file']);
|
||||
unset($extra['file']);
|
||||
if ($this->gelfVersion === 1) {
|
||||
if (isset($record['channel'])) {
|
||||
$message->setFacility($record['channel']);
|
||||
}
|
||||
if (isset($extra['line'])) {
|
||||
$message->setLine($extra['line']);
|
||||
unset($extra['line']);
|
||||
}
|
||||
if (isset($extra['file'])) {
|
||||
$message->setFile($extra['file']);
|
||||
unset($extra['file']);
|
||||
}
|
||||
} else {
|
||||
$message->setAdditional('facility', $record['channel']);
|
||||
}
|
||||
|
||||
foreach ($extra as $key => $val) {
|
||||
@@ -147,11 +160,13 @@ class GelfMessageFormatter extends NormalizerFormatter
|
||||
$message->setAdditional($this->contextPrefix . $key, $val);
|
||||
}
|
||||
|
||||
/** @phpstan-ignore-next-line */
|
||||
if (null === $message->getFile() && isset($context['exception']['file'])) {
|
||||
if (preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) {
|
||||
$message->setFile($matches[1]);
|
||||
$message->setLine($matches[2]);
|
||||
if ($this->gelfVersion === 1) {
|
||||
/** @phpstan-ignore-next-line */
|
||||
if (null === $message->getFile() && isset($context['exception']['file'])) {
|
||||
if (preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) {
|
||||
$message->setFile($matches[1]);
|
||||
$message->setLine($matches[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ use Monolog\LogRecord;
|
||||
/**
|
||||
* Encodes message information into JSON in a format compatible with Cloud logging.
|
||||
*
|
||||
* @see https://cloud.google.com/logging/docs/structured-logging
|
||||
* @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry
|
||||
*
|
||||
* @author Luís Cobucci <lcobucci@gmail.com>
|
||||
@@ -28,7 +29,7 @@ final class GoogleCloudLoggingFormatter extends JsonFormatter
|
||||
{
|
||||
// Re-key level for GCP logging
|
||||
$record['severity'] = $record['level_name'];
|
||||
$record['timestamp'] = $record['datetime']->format(DateTimeInterface::RFC3339_EXTENDED);
|
||||
$record['time'] = $record['datetime']->format(DateTimeInterface::RFC3339_EXTENDED);
|
||||
|
||||
// Remove keys that are not used by GCP
|
||||
unset($record['level'], $record['level_name'], $record['datetime']);
|
||||
|
||||
@@ -151,13 +151,14 @@ class AmqpHandler extends AbstractProcessingHandler
|
||||
|
||||
private function createAmqpMessage(string $data): AMQPMessage
|
||||
{
|
||||
return new AMQPMessage(
|
||||
$data,
|
||||
[
|
||||
'delivery_mode' => 2,
|
||||
'content_type' => 'application/json',
|
||||
]
|
||||
);
|
||||
$attributes = [
|
||||
'delivery_mode' => 2,
|
||||
'content_type' => 'application/json',
|
||||
];
|
||||
if ($this->extraAttributes) {
|
||||
$attributes = array_merge($attributes, $this->extraAttributes);
|
||||
}
|
||||
return new AMQPMessage($data, $attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace Monolog\Handler;
|
||||
use Monolog\Formatter\FormatterInterface;
|
||||
use Monolog\Formatter\LineFormatter;
|
||||
use Monolog\Utils;
|
||||
use Monolog\Logger;
|
||||
|
||||
use function count;
|
||||
use function headers_list;
|
||||
@@ -177,7 +178,7 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
|
||||
$extra = static::dump('Extra', $record['extra']);
|
||||
|
||||
if (empty($context) && empty($extra)) {
|
||||
$script[] = static::call_array('log', static::handleStyles($record['formatted']));
|
||||
$script[] = static::call_array(static::getConsoleMethodForLevel($record['level']), static::handleStyles($record['formatted']));
|
||||
} else {
|
||||
$script = array_merge(
|
||||
$script,
|
||||
@@ -192,6 +193,20 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
|
||||
return "(function (c) {if (c && c.groupCollapsed) {\n" . implode("\n", $script) . "\n}})(console);";
|
||||
}
|
||||
|
||||
private static function getConsoleMethodForLevel(int $level): string
|
||||
{
|
||||
return [
|
||||
Logger::DEBUG => 'debug',
|
||||
Logger::INFO => 'info',
|
||||
Logger::NOTICE => 'info',
|
||||
Logger::WARNING => 'warn',
|
||||
Logger::ERROR => 'error',
|
||||
Logger::CRITICAL => 'error',
|
||||
Logger::ALERT => 'error',
|
||||
Logger::EMERGENCY => 'error',
|
||||
][$level] ?? 'log';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
|
||||
@@ -28,6 +28,7 @@ use Monolog\Formatter\FormatterInterface;
|
||||
* @see https://www.flowdock.com/api/push
|
||||
*
|
||||
* @phpstan-import-type FormattedRecord from AbstractProcessingHandler
|
||||
* @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4
|
||||
*/
|
||||
class FlowdockHandler extends SocketHandler
|
||||
{
|
||||
|
||||
@@ -64,4 +64,18 @@ class WhatFailureGroupHandler extends GroupHandler
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function close(): void
|
||||
{
|
||||
foreach ($this->handlers as $handler) {
|
||||
try {
|
||||
$handler->close();
|
||||
} catch (\Throwable $e) {
|
||||
// What failure?
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
68
vendor/monolog/monolog/src/Monolog/Logger.php
vendored
68
vendor/monolog/monolog/src/Monolog/Logger.php
vendored
@@ -168,6 +168,11 @@ class Logger implements LoggerInterface, ResettableInterface
|
||||
*/
|
||||
private $logDepth = 0;
|
||||
|
||||
/**
|
||||
* @var \WeakMap<\Fiber, int>|null Keeps track of depth inside fibers to prevent infinite logging loops
|
||||
*/
|
||||
private $fiberLogDepth;
|
||||
|
||||
/**
|
||||
* @var bool Whether to detect infinite logging loops
|
||||
*
|
||||
@@ -189,6 +194,13 @@ class Logger implements LoggerInterface, ResettableInterface
|
||||
$this->setHandlers($handlers);
|
||||
$this->processors = $processors;
|
||||
$this->timezone = $timezone ?: new DateTimeZone(date_default_timezone_get() ?: 'UTC');
|
||||
|
||||
if (\PHP_VERSION_ID >= 80100) {
|
||||
// Local variable for phpstan, see https://github.com/phpstan/phpstan/issues/6732#issuecomment-1111118412
|
||||
/** @var \WeakMap<\Fiber, int> $fiberLogDepth */
|
||||
$fiberLogDepth = new \WeakMap();
|
||||
$this->fiberLogDepth = $fiberLogDepth;
|
||||
}
|
||||
}
|
||||
|
||||
public function getName(): string
|
||||
@@ -332,12 +344,20 @@ class Logger implements LoggerInterface, ResettableInterface
|
||||
}
|
||||
|
||||
if ($this->detectCycles) {
|
||||
$this->logDepth += 1;
|
||||
if (\PHP_VERSION_ID >= 80100 && $fiber = \Fiber::getCurrent()) {
|
||||
$this->fiberLogDepth[$fiber] = $this->fiberLogDepth[$fiber] ?? 0;
|
||||
$logDepth = ++$this->fiberLogDepth[$fiber];
|
||||
} else {
|
||||
$logDepth = ++$this->logDepth;
|
||||
}
|
||||
} else {
|
||||
$logDepth = 0;
|
||||
}
|
||||
if ($this->logDepth === 3) {
|
||||
|
||||
if ($logDepth === 3) {
|
||||
$this->warning('A possible infinite logging loop was detected and aborted. It appears some of your handler code is triggering logging, see the previous log record for a hint as to what may be the cause.');
|
||||
return false;
|
||||
} elseif ($this->logDepth >= 5) { // log depth 4 is let through so we can log the warning above
|
||||
} elseif ($logDepth >= 5) { // log depth 4 is let through, so we can log the warning above
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -387,7 +407,11 @@ class Logger implements LoggerInterface, ResettableInterface
|
||||
}
|
||||
} finally {
|
||||
if ($this->detectCycles) {
|
||||
$this->logDepth--;
|
||||
if (isset($fiber)) {
|
||||
$this->fiberLogDepth[$fiber]--;
|
||||
} else {
|
||||
$this->logDepth--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -698,4 +722,40 @@ class Logger implements LoggerInterface, ResettableInterface
|
||||
|
||||
($this->exceptionHandler)($e, $record);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function __serialize(): array
|
||||
{
|
||||
return [
|
||||
'name' => $this->name,
|
||||
'handlers' => $this->handlers,
|
||||
'processors' => $this->processors,
|
||||
'microsecondTimestamps' => $this->microsecondTimestamps,
|
||||
'timezone' => $this->timezone,
|
||||
'exceptionHandler' => $this->exceptionHandler,
|
||||
'logDepth' => $this->logDepth,
|
||||
'detectCycles' => $this->detectCycles,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $data
|
||||
*/
|
||||
public function __unserialize(array $data): void
|
||||
{
|
||||
foreach (['name', 'handlers', 'processors', 'microsecondTimestamps', 'timezone', 'exceptionHandler', 'logDepth', 'detectCycles'] as $property) {
|
||||
if (isset($data[$property])) {
|
||||
$this->$property = $data[$property];
|
||||
}
|
||||
}
|
||||
|
||||
if (\PHP_VERSION_ID >= 80100) {
|
||||
// Local variable for phpstan, see https://github.com/phpstan/phpstan/issues/6732#issuecomment-1111118412
|
||||
/** @var \WeakMap<\Fiber, int> $fiberLogDepth */
|
||||
$fiberLogDepth = new \WeakMap();
|
||||
$this->fiberLogDepth = $fiberLogDepth;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,8 @@ class PsrLogMessageProcessor implements ProcessorInterface
|
||||
} else {
|
||||
$replacements[$placeholder] = $val->format($this->dateFormat ?: static::SIMPLE_DATE);
|
||||
}
|
||||
} elseif ($val instanceof \UnitEnum) {
|
||||
$replacements[$placeholder] = $val instanceof \BackedEnum ? $val->value : $val->name;
|
||||
} elseif (is_object($val)) {
|
||||
$replacements[$placeholder] = '[object '.Utils::getClass($val).']';
|
||||
} elseif (is_array($val)) {
|
||||
|
||||
Reference in New Issue
Block a user