Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .rector.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
use Rector\PHPUnit\CodeQuality\Rector\Class_\PreferPHPUnitThisCallRector;
use Rector\Privatization\Rector as Privatization;
use Rector\Renaming\Rector as Renaming;
use Rector\Renaming\Rector\ClassConstFetch\RenameClassConstFetchRector;
use Rector\Renaming\ValueObject\RenameClassAndConstFetch;
use Rector\Strict\Rector as Strict;
use Rector\Transform\Rector as Transform;
use Rector\TypeDeclaration\Rector as TypeDeclaration;
Expand All @@ -43,6 +45,16 @@
->withRules([
Php85\ArrayDimFetch\ArrayFirstLastRector::class,
])
->withConfiguredRule(RenameClassConstFetchRector::class, [
new RenameClassAndConstFetch('Zend_Log', 'EMERG', 'Monolog\Level', 'Emergency'),
new RenameClassAndConstFetch('Zend_Log', 'ALERT', 'Monolog\Level', 'Alert'),
new RenameClassAndConstFetch('Zend_Log', 'CRIT', 'Monolog\Level', 'Critical'),
new RenameClassAndConstFetch('Zend_Log', 'ERR', 'Monolog\Level', 'Error'),
new RenameClassAndConstFetch('Zend_Log', 'WARN', 'Monolog\Level', 'Warning'),
new RenameClassAndConstFetch('Zend_Log', 'NOTICE', 'Monolog\Level', 'Notice'),
new RenameClassAndConstFetch('Zend_Log', 'INFO', 'Monolog\Level', 'Info'),
new RenameClassAndConstFetch('Zend_Log', 'DEBUG', 'Monolog\Level', 'Debug'),
])
->withSkip([
CodeQuality\BooleanNot\SimplifyDeMorganBinaryRector::class,
# skip: causes issues with Mage_Api2_Model_Auth_Adapter_Oauth::getUserParams()
Expand Down
56 changes: 38 additions & 18 deletions app/Mage.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
* @package Mage
*/

use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler;
use Monolog\Level;
use Monolog\Logger;

defined('DS') || define('DS', DIRECTORY_SEPARATOR);
defined('PS') || define('PS', PATH_SEPARATOR);

Expand Down Expand Up @@ -865,20 +870,20 @@ public static function isInstalled($options = [])
* log facility (??)
*
* @param array|object|string $message
* @param int $level
* @param null|int|Level::* $level
* @param null|string $file
* @param bool $forceLog
*/
public static function log($message, $level = null, $file = '', $forceLog = false)
public static function log($message, $level = null, $file = '', $forceLog = false, array $context = [])
{
if (!self::getConfig()) {
return;
}

try {
$logActive = self::getStoreConfig('dev/log/active');
$logActive = self::getStoreConfigFlag(Mage_Core_Helper_Data::XML_PATH_DEV_LOG_ENABLED);
if (empty($file)) {
$file = self::getStoreConfig('dev/log/file');
$file = self::getStoreConfig(Mage_Core_Helper_Data::XML_PATH_DEV_LOG_FILE);
}
} catch (Exception) {
$logActive = true;
Expand All @@ -891,26 +896,39 @@ public static function log($message, $level = null, $file = '', $forceLog = fals
static $loggers = [];

try {
$maxLogLevel = (int) self::getStoreConfig('dev/log/max_level');
$maxLogLevel = self::getStoreConfigAsInt(Mage_Core_Helper_Data::XML_PATH_DEV_LOG_MAX_LEVEL);
} catch (Throwable) {
$maxLogLevel = Zend_Log::DEBUG;
$maxLogLevel = Level::Debug->value;
}

$level = is_null($level) ? Zend_Log::DEBUG : $level;
// Normalize both $level and $maxLogLevel to integers for comparison
if ($level instanceof Level) {
$levelValue = $level->value;
} elseif (is_null($level)) {
$levelValue = Level::Debug->value;
} else {
$levelValue = (int) $level;
}

if (!self::$_isDeveloperMode && $level > $maxLogLevel && !$forceLog) {
if (!self::$_isDeveloperMode && $levelValue > $maxLogLevel && !$forceLog) {
return;
}

$file = empty($file)
? (string) self::getConfig()->getNode('dev/log/file', Mage_Core_Model_Store::DEFAULT_CODE) : basename($file);
? (string) self::getConfig()->getNode(
Mage_Core_Helper_Data::XML_PATH_DEV_LOG_FILE,
Mage_Core_Model_Store::DEFAULT_CODE,
) : basename($file);

try {
if (!isset($loggers[$file])) {
// Validate file extension before save. Allowed file extensions: log, txt, html, csv
$_allowedFileExtensions = explode(
',',
(string) self::getConfig()->getNode('dev/log/allowedFileExtensions', Mage_Core_Model_Store::DEFAULT_CODE),
(string) self::getConfig()->getNode(
Mage_Core_Helper_Data::XML_PATH_DEV_LOG_ALLOWED_EXTENSIONS,
Mage_Core_Model_Store::DEFAULT_CODE,
),
);
if (! ($extension = pathinfo($file, PATHINFO_EXTENSION)) || ! in_array($extension, $_allowedFileExtensions)) {
return;
Expand All @@ -929,25 +947,27 @@ public static function log($message, $level = null, $file = '', $forceLog = fals
chmod($logFile, 0640);
}

$format = '%timestamp% %priorityName% (%priority%): %message%' . PHP_EOL;
$formatter = new Zend_Log_Formatter_Simple($format);
$format = '%datetime% %level_name% (%level%): %message% %context% %extra%' . PHP_EOL;
$formatter = new LineFormatter($format, null, true, true, true);
$writerModel = (string) self::getConfig()->getNode('global/log/core/writer_model');
if (!self::$_app || !$writerModel) {
$writer = new Zend_Log_Writer_Stream($logFile);
$writer = new StreamHandler($logFile, Level::Debug);
} else {
$writer = new $writerModel($logFile);
$writer = new $writerModel($logFile, Level::Debug);
}

$writer->setFormatter($formatter);
$loggers[$file] = new Zend_Log($writer);
$logger = new Logger('OpenMage');
$logger->pushHandler($writer);
$loggers[$file] = $logger;
}

if (is_array($message) || is_object($message)) {
$message = print_r($message, true);
}

$message = addcslashes($message, '<?');
$loggers[$file]->log($message, $level);
$loggers[$file]->log($levelValue, $message, $context);
} catch (Exception) {
}
}
Expand All @@ -961,8 +981,8 @@ public static function logException(Throwable $e)
return;
}

$file = self::getStoreConfig('dev/log/exception_file');
self::log("\n" . $e->__toString(), Zend_Log::ERR, $file);
$file = self::getStoreConfig(Mage_Core_Helper_Data::XML_PATH_DEV_LOG_EXCEPTION_FILE);
self::log("\n" . $e->__toString(), Level::Error, $file);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
* @package Mage_Adminhtml
*/

use Monolog\Level;

/**
* Log Levels Source Model
*
Expand All @@ -19,14 +21,14 @@ public function toOptionArray()
$helper = Mage::helper('adminhtml');

return [
Zend_Log::EMERG => $helper->__('Emergency'),
Zend_Log::ALERT => $helper->__('Alert'),
Zend_Log::CRIT => $helper->__('Critical'),
Zend_Log::ERR => $helper->__('Error'),
Zend_Log::WARN => $helper->__('Warning'),
Zend_Log::NOTICE => $helper->__('Notice'),
Zend_Log::INFO => $helper->__('Informational'),
Zend_Log::DEBUG => $helper->__('Debug'),
Level::Emergency->value => $helper->__('Emergency'),
Level::Alert->value => $helper->__('Alert'),
Level::Critical->value => $helper->__('Critical'),
Level::Error->value => $helper->__('Error'),
Level::Warning->value => $helper->__('Warning'),
Level::Notice->value => $helper->__('Notice'),
Level::Info->value => $helper->__('Informational'),
Level::Debug->value => $helper->__('Debug'),
];
}
}
2 changes: 1 addition & 1 deletion app/code/core/Mage/Api/Model/Server/Handler/Abstract.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public function __construct()
*/
public function handlePhpError($errorCode, $errorMessage, $errorFile, $errLine)
{
Mage::log($errorMessage . ' in ' . $errorFile . ' on line ' . $errLine, Zend_Log::ERR);
Mage::log($errorMessage . ' in ' . $errorFile . ' on line ' . $errLine, \Monolog\Level::Error);
if (in_array($errorCode, [E_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR])) {
$this->_fault('internal');
}
Expand Down
4 changes: 2 additions & 2 deletions app/code/core/Mage/Core/Block/Template.php
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ public function setScriptPath($dir)
if (!str_contains($dir, '..') && ($dir === Mage::getBaseDir('design') || str_starts_with(realpath($dir), realpath(Mage::getBaseDir('design'))))) {
$this->_viewDir = $dir;
} else {
Mage::log('Not valid script path:' . $dir, Zend_Log::CRIT, null, true);
Mage::log('Not valid script path:' . $dir, \Monolog\Level::Critical, null, true);
}

return $this;
Expand Down Expand Up @@ -280,7 +280,7 @@ public function fetchView($fileName)
include $this->_viewDir . DS . $fileName;
} else {
$thisClass = static::class;
Mage::log('Not valid template file:' . $fileName . ' class: ' . $thisClass, Zend_Log::CRIT, null, true);
Mage::log('Not valid template file:' . $fileName . ' class: ' . $thisClass, \Monolog\Level::Critical, null, true);
}
} catch (Throwable $throwable) {
if (!$do) {
Expand Down
2 changes: 1 addition & 1 deletion app/code/core/Mage/Core/Controller/Varien/Router/Admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ protected function _beforeModuleMatch()
// If it does, fail secure (possible database corruption/bypass)
Mage::log(
"Unable to parse custom admin URL host: {$adminUrl}. Access denied for security.",
Zend_Log::ERR,
\Monolog\Level::Error,
'system.log',
);
return false;
Expand Down
10 changes: 10 additions & 0 deletions app/code/core/Mage/Core/Helper/Data.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,16 @@ class Mage_Core_Helper_Data extends Mage_Core_Helper_Abstract

public const XML_PATH_DEV_ALLOW_IPS = 'dev/restrict/allow_ips';

public const XML_PATH_DEV_LOG_ENABLED = 'dev/log/active';

public const XML_PATH_DEV_LOG_ALLOWED_EXTENSIONS = 'dev/log/allowedFileExtensions';

public const XML_PATH_DEV_LOG_FILE = 'dev/log/file';

public const XML_PATH_DEV_LOG_EXCEPTION_FILE = 'dev/log/exception_file';

public const XML_PATH_DEV_LOG_MAX_LEVEL = 'dev/log/max_level';

public const XML_PATH_CACHE_BETA_TYPES = 'global/cache/betatypes';

public const XML_PATH_CONNECTION_TYPE = 'global/resources/default_setup/connection/type';
Expand Down
2 changes: 1 addition & 1 deletion app/code/core/Mage/Core/Model/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,7 @@ public function getCacheSaveLock($waitTime = null, $ignoreFailure = false)
} elseif (PHP_SAPI === 'cli') {
throw new Exception('Could not get lock on cache save operation.');
} else {
Mage::log(sprintf('Failed to get cache save lock in %d seconds.', $waitTime), Zend_Log::NOTICE);
Mage::log(sprintf('Failed to get cache save lock in %d seconds.', $waitTime), \Monolog\Level::Notice);
require Mage::getBaseDir() . DS . 'errors' . DS . '503.php';
die();
}
Expand Down
6 changes: 4 additions & 2 deletions app/code/core/Mage/Core/Model/Design/Package.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
* @package Mage_Core
*/

use Monolog\Level;

/**
* @package Mage_Core
*/
Expand Down Expand Up @@ -459,7 +461,7 @@ public function getFilename($file, array $params)

// Prevent reading files outside of the proper directory while still allowing symlinked files
if (str_contains($file, '..')) {
Mage::log(sprintf('Invalid path requested: %s (params: %s)', $file, json_encode($params)), Zend_Log::ERR);
Mage::log(sprintf('Invalid path requested: %s (params: %s)', $file, json_encode($params)), Level::Error);
throw new Exception('Invalid path requested.');
}

Expand Down Expand Up @@ -520,7 +522,7 @@ public function getSkinUrl($file = null, array $params = [])

// Prevent reading files outside of the proper directory while still allowing symlinked files
if (str_contains((string) $file, '..')) {
Mage::log(sprintf('Invalid path requested: %s (params: %s)', $file, json_encode($params)), Zend_Log::ERR);
Mage::log(sprintf('Invalid path requested: %s (params: %s)', $file, json_encode($params)), Level::Error);
throw new Exception('Invalid path requested.');
}

Expand Down
9 changes: 6 additions & 3 deletions app/code/core/Mage/Core/Model/Logger.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
* @package Mage_Core
*/

use Monolog\Level;

/**
* Logger model
*
Expand All @@ -18,13 +20,14 @@ class Mage_Core_Model_Logger
* Log wrapper
*
* @param string $message
* @param int $level
* @param Level::* $level
* @param string $file
* @param bool $forceLog
* @param array $context additional context for the log entry
*/
public function log($message, $level = null, $file = '', $forceLog = false)
public function log($message, $level = null, $file = '', $forceLog = false, array $context = [])
{
Mage::log($message, $level, $file, $forceLog);
Mage::log($message, $level, $file, $forceLog, $context);
}

/**
Expand Down
6 changes: 3 additions & 3 deletions app/code/core/Mage/Core/etc/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<config>
<modules>
<Mage_Core>
<version>1.6.0.10</version>
<version>1.6.0.11</version>
</Mage_Core>
</modules>
<global>
Expand Down Expand Up @@ -142,7 +142,7 @@
</request>
<log>
<core>
<writer_model>Zend_Log_Writer_Stream</writer_model>
<writer_model>Monolog\Handler\StreamHandler</writer_model>
</core>
</log>
<url_rewrite>
Expand Down Expand Up @@ -296,7 +296,7 @@
</translate_inline>
<log>
<active>0</active>
<max_level>7</max_level>
<max_level>600</max_level>
<file>system.log</file>
<exception_file>exception.log</exception_file>
</log>
Expand Down
2 changes: 1 addition & 1 deletion app/code/core/Mage/Core/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ function mageCoreErrorHandler($errno, $errstr, $errfile, $errline)
if (Mage::getIsDeveloperMode()) {
throw new Exception($errorMessage);
} else {
Mage::log($errorMessage, Zend_Log::ERR);
Mage::log($errorMessage, \Monolog\Level::Error);
return null;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

/**
* @copyright For copyright and license information, read the COPYING.txt file.
* @link /COPYING.txt
* @license Open Software License (OSL 3.0)
* @package Mage_Core
*/

use Monolog\Level;

/** @var Mage_Core_Model_Resource_Setup $this */
$installer = $this;
$installer->startSetup();

$connection = $installer->getConnection();
$table = $installer->getTable('core/config_data');

$select = $connection->select()
->from($table)
->where('path = ?', Mage_Core_Helper_Data::XML_PATH_DEV_LOG_MAX_LEVEL);

$logConfig = $connection->fetchAll($select);

foreach ($logConfig as $config) {
$zendValue = (int) $config['value'];
$monologValue = match ($zendValue) {
0 => Level::Emergency->value,
1 => Level::Alert->value,
2 => Level::Critical->value,
3 => Level::Error->value,
4 => Level::Warning->value,
5 => Level::Notice->value,
6 => Level::Info->value,
default => Level::Debug->value,
};

$connection->insertOnDuplicate(
$table,
[
'scope' => $config['scope'],
'scope_id' => $config['scope_id'],
'path' => Mage_Core_Helper_Data::XML_PATH_DEV_LOG_MAX_LEVEL,
'value' => $monologValue,
],
['value'],
);
}

$installer->endSetup();
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public function getOptionId($value)
if ($bcWarning) {
Mage::log(
'Mage_Eav_Model_Entity_Attribute_Source_Abstract::getOptionId() no longer accepts option_id as param',
Zend_Log::WARN,
\Monolog\Level::Warning,
);
}

Expand Down
Loading
Loading