forked from devsam/core
Dep: update
주로 PHAN
This commit is contained in:
Vendored
+19
@@ -1,3 +1,22 @@
|
||||
### 1.26.1 (2021-05-28)
|
||||
|
||||
* Fixed PHP 8.1 deprecation warning
|
||||
|
||||
### 1.26.0 (2020-12-14)
|
||||
|
||||
* Added $dateFormat and $removeUsedContextFields arguments to PsrLogMessageProcessor (backport from 2.x)
|
||||
|
||||
### 1.25.5 (2020-07-23)
|
||||
|
||||
* Fixed array access on null in RavenHandler
|
||||
* Fixed unique_id in WebProcessor not being disableable
|
||||
|
||||
### 1.25.4 (2020-05-22)
|
||||
|
||||
* Fixed GitProcessor type error when there is no git repo present
|
||||
* Fixed normalization of SoapFault objects containing deeply nested objects as "detail"
|
||||
* Fixed support for relative paths in RotatingFileHandler
|
||||
|
||||
### 1.25.3 (2019-12-20)
|
||||
|
||||
* Fixed formatting of resources in JsonFormatter
|
||||
|
||||
Vendored
+5
-13
@@ -26,10 +26,8 @@
|
||||
"php-amqplib/php-amqplib": "~2.4",
|
||||
"swiftmailer/swiftmailer": "^5.3|^6.0",
|
||||
"php-console/php-console": "^3.1.3",
|
||||
"phpunit/phpunit-mock-objects": "2.3.0",
|
||||
"jakub-onderka/php-parallel-lint": "0.9"
|
||||
"phpstan/phpstan": "^0.12.59"
|
||||
},
|
||||
"_": "phpunit/phpunit-mock-objects required in 2.3.0 due to https://github.com/sebastianbergmann/phpunit-mock-objects/issues/223 - needs hhvm 3.8+ on travis",
|
||||
"suggest": {
|
||||
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
|
||||
"sentry/sentry": "Allow sending log messages to a Sentry server",
|
||||
@@ -52,15 +50,9 @@
|
||||
"provide": {
|
||||
"psr/log-implementation": "1.0.0"
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.0.x-dev"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"test": [
|
||||
"parallel-lint . --exclude vendor --exclude src/Monolog/Handler/FormattableHandlerInterface.php --exclude src/Monolog/Handler/FormattableHandlerTrait.php --exclude src/Monolog/Handler/ProcessableHandlerInterface.php --exclude src/Monolog/Handler/ProcessableHandlerTrait.php",
|
||||
"phpunit"
|
||||
]
|
||||
}
|
||||
"test": "vendor/bin/phpunit",
|
||||
"phpstan": "vendor/bin/phpstan analyse"
|
||||
},
|
||||
"lock": false
|
||||
}
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
parameters:
|
||||
level: 3
|
||||
|
||||
paths:
|
||||
- src/
|
||||
# - tests/
|
||||
|
||||
|
||||
ignoreErrors:
|
||||
- '#zend_monitor_|ZEND_MONITOR_#'
|
||||
- '#RollbarNotifier#'
|
||||
- '#Predis\\Client#'
|
||||
- '#^Cannot call method ltrim\(\) on int\|false.$#'
|
||||
- '#^Access to an undefined property Raven_Client::\$context.$#'
|
||||
- '#MongoDB\\(Client|Collection)#'
|
||||
- '#Gelf\\IMessagePublisher#'
|
||||
+1
-1
@@ -14,7 +14,6 @@ namespace Monolog;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Psr\Log\LogLevel;
|
||||
use Monolog\Handler\AbstractHandler;
|
||||
use Monolog\Registry;
|
||||
|
||||
/**
|
||||
* Monolog error handler
|
||||
@@ -63,6 +62,7 @@ class ErrorHandler
|
||||
//Forces the autoloader to run for LogLevel. Fixes an autoload issue at compile-time on PHP5.3. See https://github.com/Seldaek/monolog/pull/929
|
||||
class_exists('\\Psr\\Log\\LogLevel', true);
|
||||
|
||||
/** @phpstan-ignore-next-line */
|
||||
$handler = new static($logger);
|
||||
if ($errorLevelMap !== false) {
|
||||
$handler->registerErrorHandler($errorLevelMap);
|
||||
|
||||
@@ -142,8 +142,12 @@ class NormalizerFormatter implements FormatterInterface
|
||||
$data['faultactor'] = $e->faultactor;
|
||||
}
|
||||
|
||||
if (isset($e->detail) && (is_string($e->detail) || is_object($e->detail) || is_array($e->detail))) {
|
||||
$data['detail'] = is_string($e->detail) ? $e->detail : reset($e->detail);
|
||||
if (isset($e->detail)) {
|
||||
if (is_string($e->detail)) {
|
||||
$data['detail'] = $e->detail;
|
||||
} elseif (is_object($e->detail) || is_array($e->detail)) {
|
||||
$data['detail'] = $this->toJson($e->detail, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@ abstract class AbstractHandler implements HandlerInterface, ResettableInterface
|
||||
protected $processors = array();
|
||||
|
||||
/**
|
||||
* @param int $level The minimum logging level at which this handler will be triggered
|
||||
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
||||
* @param int|string $level The minimum logging level at which this handler will be triggered
|
||||
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
||||
*/
|
||||
public function __construct($level = Logger::DEBUG, $bubble = true)
|
||||
{
|
||||
|
||||
@@ -77,6 +77,7 @@ class DynamoDbHandler extends AbstractProcessingHandler
|
||||
if ($this->version === 3) {
|
||||
$formatted = $this->marshaler->marshalItem($filtered);
|
||||
} else {
|
||||
/** @phpstan-ignore-next-line */
|
||||
$formatted = $this->client->formatAttributes($filtered);
|
||||
}
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ class FirePHPHandler extends AbstractProcessingHandler
|
||||
*
|
||||
* @see createHeader()
|
||||
* @param array $record
|
||||
* @return string
|
||||
* @return array
|
||||
*/
|
||||
protected function createRecordHeader(array $record)
|
||||
{
|
||||
|
||||
@@ -27,7 +27,7 @@ use Monolog\Formatter\GelfMessageFormatter;
|
||||
class GelfHandler extends AbstractProcessingHandler
|
||||
{
|
||||
/**
|
||||
* @var Publisher the publisher object that sends the message to the server
|
||||
* @var Publisher|PublisherInterface|IMessagePublisher the publisher object that sends the message to the server
|
||||
*/
|
||||
protected $publisher;
|
||||
|
||||
|
||||
@@ -270,10 +270,10 @@ class HipChatHandler extends SocketHandler
|
||||
* will be the highest level from the given records. Datetime will be taken
|
||||
* from the first record.
|
||||
*
|
||||
* @param $records
|
||||
* @param array $records
|
||||
* @return array
|
||||
*/
|
||||
private function combineRecords($records)
|
||||
private function combineRecords(array $records)
|
||||
{
|
||||
$batchRecord = null;
|
||||
$batchRecords = array();
|
||||
|
||||
@@ -50,7 +50,7 @@ class RavenHandler extends AbstractProcessingHandler
|
||||
protected $ravenClient;
|
||||
|
||||
/**
|
||||
* @var LineFormatter The formatter to use for the logs generated via handleBatch()
|
||||
* @var FormatterInterface The formatter to use for the logs generated via handleBatch()
|
||||
*/
|
||||
protected $batchFormatter;
|
||||
|
||||
@@ -86,7 +86,7 @@ class RavenHandler extends AbstractProcessingHandler
|
||||
|
||||
// the record with the highest severity is the "main" one
|
||||
$record = array_reduce($records, function ($highest, $record) {
|
||||
if ($record['level'] > $highest['level']) {
|
||||
if (null === $highest || $record['level'] > $highest['level']) {
|
||||
return $record;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ class RedisHandler extends AbstractProcessingHandler
|
||||
* @param string $key The key name to push records to
|
||||
* @param int $level The minimum logging level at which this handler will be triggered
|
||||
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
||||
* @param int $capSize Number of entries to limit list size to
|
||||
* @param int|false $capSize Number of entries to limit list size to
|
||||
*/
|
||||
public function __construct($redis, $key, $level = Logger::DEBUG, $bubble = true, $capSize = false)
|
||||
{
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
namespace Monolog\Handler;
|
||||
|
||||
use Monolog\Logger;
|
||||
use Monolog\Utils;
|
||||
|
||||
/**
|
||||
* Stores logs to files that are rotated every day and a limited number of files are kept.
|
||||
@@ -45,7 +46,7 @@ class RotatingFileHandler extends StreamHandler
|
||||
*/
|
||||
public function __construct($filename, $maxFiles = 0, $level = Logger::DEBUG, $bubble = true, $filePermission = null, $useLocking = false)
|
||||
{
|
||||
$this->filename = $filename;
|
||||
$this->filename = Utils::canonicalizePath($filename);
|
||||
$this->maxFiles = (int) $maxFiles;
|
||||
$this->nextRotation = new \DateTime('tomorrow');
|
||||
$this->filenameFormat = '{filename}-{date}';
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
namespace Monolog\Handler;
|
||||
|
||||
use Monolog\Logger;
|
||||
use Monolog\Utils;
|
||||
|
||||
/**
|
||||
* Stores to any stream resource
|
||||
@@ -45,7 +46,7 @@ class StreamHandler extends AbstractProcessingHandler
|
||||
if (is_resource($stream)) {
|
||||
$this->stream = $stream;
|
||||
} elseif (is_string($stream)) {
|
||||
$this->url = $stream;
|
||||
$this->url = Utils::canonicalizePath($stream);
|
||||
} else {
|
||||
throw new \InvalidArgumentException('A stream must either be a resource or a string.');
|
||||
}
|
||||
@@ -105,7 +106,8 @@ class StreamHandler extends AbstractProcessingHandler
|
||||
restore_error_handler();
|
||||
if (!is_resource($this->stream)) {
|
||||
$this->stream = null;
|
||||
throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened: '.$this->errorMessage, $this->url));
|
||||
|
||||
throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened in append mode: '.$this->errorMessage, $this->url));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,7 +154,7 @@ class StreamHandler extends AbstractProcessingHandler
|
||||
return dirname(substr($stream, 7));
|
||||
}
|
||||
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
private function createDir()
|
||||
|
||||
+2
-2
@@ -321,7 +321,7 @@ class Logger implements LoggerInterface, ResettableInterface
|
||||
if ($this->microsecondTimestamps && PHP_VERSION_ID < 70100) {
|
||||
$ts = \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), static::$timezone);
|
||||
} else {
|
||||
$ts = new \DateTime(null, static::$timezone);
|
||||
$ts = new \DateTime('now', static::$timezone);
|
||||
}
|
||||
$ts->setTimezone(static::$timezone);
|
||||
|
||||
@@ -522,7 +522,7 @@ class Logger implements LoggerInterface, ResettableInterface
|
||||
/**
|
||||
* Converts PSR-3 levels to Monolog ones if necessary
|
||||
*
|
||||
* @param string|int Level number (monolog) or name (PSR-3)
|
||||
* @param string|int $level Level number (monolog) or name (PSR-3)
|
||||
* @return int
|
||||
*/
|
||||
public static function toMonologLevel($level)
|
||||
|
||||
@@ -52,7 +52,7 @@ class GitProcessor implements ProcessorInterface
|
||||
}
|
||||
|
||||
$branches = `git branch -v --no-abbrev`;
|
||||
if (preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) {
|
||||
if ($branches && preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) {
|
||||
return self::$cache = array(
|
||||
'branch' => $matches[1],
|
||||
'commit' => $matches[2],
|
||||
|
||||
@@ -22,6 +22,24 @@ use Monolog\Utils;
|
||||
*/
|
||||
class PsrLogMessageProcessor implements ProcessorInterface
|
||||
{
|
||||
const SIMPLE_DATE = "Y-m-d\TH:i:s.uP";
|
||||
|
||||
/** @var string|null */
|
||||
private $dateFormat;
|
||||
|
||||
/** @var bool */
|
||||
private $removeUsedContextFields;
|
||||
|
||||
/**
|
||||
* @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format
|
||||
* @param bool $removeUsedContextFields If set to true the fields interpolated into message gets unset
|
||||
*/
|
||||
public function __construct($dateFormat = null, $removeUsedContextFields = false)
|
||||
{
|
||||
$this->dateFormat = $dateFormat;
|
||||
$this->removeUsedContextFields = $removeUsedContextFields;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $record
|
||||
* @return array
|
||||
@@ -34,12 +52,25 @@ class PsrLogMessageProcessor implements ProcessorInterface
|
||||
|
||||
$replacements = array();
|
||||
foreach ($record['context'] as $key => $val) {
|
||||
$placeholder = '{' . $key . '}';
|
||||
if (strpos($record['message'], $placeholder) === false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_null($val) || is_scalar($val) || (is_object($val) && method_exists($val, "__toString"))) {
|
||||
$replacements['{'.$key.'}'] = $val;
|
||||
$replacements[$placeholder] = $val;
|
||||
} elseif ($val instanceof \DateTime) {
|
||||
$replacements[$placeholder] = $val->format($this->dateFormat ?: static::SIMPLE_DATE);
|
||||
} elseif (is_object($val)) {
|
||||
$replacements['{'.$key.'}'] = '[object '.Utils::getClass($val).']';
|
||||
$replacements[$placeholder] = '[object '.Utils::getClass($val).']';
|
||||
} elseif (is_array($val)) {
|
||||
$replacements[$placeholder] = 'array'.Utils::jsonEncode($val, null, true);
|
||||
} else {
|
||||
$replacements['{'.$key.'}'] = '['.gettype($val).']';
|
||||
$replacements[$placeholder] = '['.gettype($val).']';
|
||||
}
|
||||
|
||||
if ($this->removeUsedContextFields) {
|
||||
unset($record['context'][$key]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +52,10 @@ class WebProcessor implements ProcessorInterface
|
||||
throw new \UnexpectedValueException('$serverData must be an array or object implementing ArrayAccess.');
|
||||
}
|
||||
|
||||
if (isset($this->serverData['UNIQUE_ID'])) {
|
||||
$this->extraFields['unique_id'] = 'UNIQUE_ID';
|
||||
}
|
||||
|
||||
if (null !== $extraFields) {
|
||||
if (isset($extraFields[0])) {
|
||||
foreach (array_keys($this->extraFields) as $fieldName) {
|
||||
@@ -104,10 +108,6 @@ class WebProcessor implements ProcessorInterface
|
||||
$extra[$extraName] = isset($this->serverData[$serverName]) ? $this->serverData[$serverName] : null;
|
||||
}
|
||||
|
||||
if (isset($this->serverData['UNIQUE_ID'])) {
|
||||
$extra['unique_id'] = $this->serverData['UNIQUE_ID'];
|
||||
}
|
||||
|
||||
return $extra;
|
||||
}
|
||||
}
|
||||
|
||||
+31
-1
@@ -23,6 +23,36 @@ class Utils
|
||||
return 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class;
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes sure if a relative path is passed in it is turned into an absolute path
|
||||
*
|
||||
* @param string $streamUrl stream URL or path without protocol
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function canonicalizePath($streamUrl)
|
||||
{
|
||||
$prefix = '';
|
||||
if ('file://' === substr($streamUrl, 0, 7)) {
|
||||
$streamUrl = substr($streamUrl, 7);
|
||||
$prefix = 'file://';
|
||||
}
|
||||
|
||||
// other type of stream, not supported
|
||||
if (false !== strpos($streamUrl, '://')) {
|
||||
return $streamUrl;
|
||||
}
|
||||
|
||||
// already absolute
|
||||
if (substr($streamUrl, 0, 1) === '/' || substr($streamUrl, 1, 1) === ':' || substr($streamUrl, 0, 2) === '\\\\') {
|
||||
return $prefix.$streamUrl;
|
||||
}
|
||||
|
||||
$streamUrl = getcwd() . '/' . $streamUrl;
|
||||
|
||||
return $prefix.$streamUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the JSON representation of a value
|
||||
*
|
||||
@@ -138,7 +168,7 @@ class Utils
|
||||
* Function converts the input in place in the passed variable so that it
|
||||
* can be used as a callback for array_walk_recursive.
|
||||
*
|
||||
* @param mixed &$data Input to check and convert if needed
|
||||
* @param mixed $data Input to check and convert if needed, passed by ref
|
||||
* @private
|
||||
*/
|
||||
public static function detectAndCleanUtf8(&$data)
|
||||
|
||||
Reference in New Issue
Block a user