diff --git a/app/Mage.php b/app/Mage.php index fb3f012b9e0..530c103b56f 100644 --- a/app/Mage.php +++ b/app/Mage.php @@ -870,7 +870,7 @@ public static function isInstalled($options = []) * log facility (??) * * @param array|object|string $message - * @param null|int|Level::* $level + * @param null|int|Level::*|string $level * @param null|string $file * @param bool $forceLog */ @@ -906,8 +906,31 @@ public static function log($message, $level = null, $file = '', $forceLog = fals $levelValue = $level->value; } elseif (is_null($level)) { $levelValue = Level::Debug->value; + } elseif (is_string($level) && !is_numeric($level)) { + // PSR 3 Log level + try { + $levelValue = Level::fromName($level)->value; + } catch (ValueError) { + $levelValue = Level::Debug->value; // fallback to debug level + } } else { $levelValue = (int) $level; + // change RFC 5424 Log Level into Monolog. + if ($levelValue >= 0 && $levelValue <= 7) { + $levelValue = (match ($levelValue) { + 7 => Level::Debug, + 6 => Level::Info, + 5 => Level::Notice, + 4 => Level::Warning, + 3 => Level::Error, + 2 => Level::Critical, + 1 => Level::Alert, + 0 => Level::Emergency, + })->value; + } elseif ($levelValue < 100) { + // unknown levels are treated as debug + $levelValue = Level::Debug->value; // fallback to debug level + } } if (!self::$_isDeveloperMode && $levelValue > $maxLogLevel && !$forceLog) { diff --git a/app/code/core/Mage/Core/Helper/PsrLogger.php b/app/code/core/Mage/Core/Helper/PsrLogger.php new file mode 100644 index 00000000000..9c33b1e08c5 --- /dev/null +++ b/app/code/core/Mage/Core/Helper/PsrLogger.php @@ -0,0 +1,41 @@ +getConstants())) { + throw new InvalidArgumentException('Level "' . $level . '" is not defined, use one of: ' . implode(', ', $reflectionClass->getConstants())); + } + + Mage::log((string) $message, $level, null, false, $context); + } +}