Como outros, eu tinha arquivos de log completamente parando de gravar dados.
Origem do erro - arquivos de log não gravam dados
Em app/Mage.php
fizeram essa mudança:
// 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;
}
que procura na configuração uma lista separada por vírgula de extensões de arquivos aprovadas. No entanto, eles NÃO adicionaram essa lista na configuração - nem mesmo uma opção no Mage Admin para nós configurarmos isso por conta própria.
Solução para o bug - arquivos de log não gravam dados
Para resolver isso, basta fazer uma entrada no banco de dados na core_config_data
tabela.
INSERT INTO core_config_data VALUES ( NULL, 'default', 0, 'dev/log/allowedFileExtensions', 'log,txt,html,csv' );
Limpe o cache de objetos também e você deverá ver os dados gravando nos arquivos de log novamente.
ls -lrt var/log/ | tail
Para referência, esse problema estava no EE 1.14.2.0 com todos os patches de segurança aplicados.
Abri um ticket com o Suporte Magento sobre esse problema, mas ainda não recebi uma resposta de um técnico. Eu estou na fila.
O que realmente me confunde sobre esse bug é que o Magento já possui um método para validar extensões de arquivo de log que eles adicionaram via SUPEE-10415 no final de 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;
}
Por que eles não reutilizaram essa lógica em vez de tentar uma reinvenção incompleta da roda de toras?