Как и у других, у меня были файлы журналов, которые полностью прекращали записывать данные.
Источник ошибки - файлы журнала не записывают данные
В app/Mage.php
они сделали это изменение:
// Validate file extension before save. Allowed file extensions: log, txt, html, csv
- if (!self::helper('log')->isLogFileExtensionValid($file)) {
+ $_allowedFileExtensions = explode(
+ ',',
+ (string) self::getConfig()->getNode('dev/log/allowedFileExtensions', Mage_Core_Model_Store::DEFAULT_CODE)
+ );
+ $logValidator = new Zend_Validate_File_Extension($_allowedFileExtensions);
+ $logDir = self::getBaseDir('var') . DS . 'log';
+ if (!$logValidator->isValid($logDir . DS . $file)) {
return;
}
который ищет в конфигурации список разрешенных расширений файлов через запятую. Однако они НЕ добавили этот список в конфигурацию - даже в Mage Admin не было возможности настроить его самостоятельно.
Решение ошибки - файлы журнала не записывают данные
Чтобы решить эту проблему, просто сделайте запись в базе данных в core_config_data
таблице.
INSERT INTO core_config_data VALUES ( NULL, 'default', 0, 'dev/log/allowedFileExtensions', 'log,txt,html,csv' );
Очистите кэш объектов, и вы должны увидеть запись данных в файлы журналов еще раз.
ls -lrt var/log/ | tail
Для справки, эта проблема была на EE 1.14.2.0 со всеми примененными исправлениями безопасности.
Я открыл заявку в службу поддержки Magento по этому вопросу, но пока не получил ответ от технического специалиста. Я в очереди.
Что действительно смущает меня в этой ошибке, так это то, что в Magento уже есть метод проверки расширений лог-файлов, который они добавили через SUPEE-10415 в конце 2017 года.
app/code/core/Mage/Log/Helper/Data.php
/**
* Checking if file extensions is allowed. If passed then return true.
*
* @param $file
* @return bool
*/
public function isLogFileExtensionValid($file)
{
$result = false;
$validatedFileExtension = pathinfo($file, PATHINFO_EXTENSION);
if ($validatedFileExtension && in_array($validatedFileExtension, $this->_allowedFileExtensions)) {
$result = true;
}
return $result;
}
Почему они не использовали эту логику вместо попытки неполного переизобретения колеса?