Giống như những người khác, tôi đã có các tệp nhật ký hoàn toàn ngừng ghi dữ liệu.
Nguồn của lỗi - Đăng nhập tệp không ghi dữ liệu
Trong app/Mage.php
họ đã thực hiện thay đổi này:
// 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;
}
đang tìm cấu hình cho danh sách các phần mở rộng tệp được phân tách bằng dấu phẩy. Tuy nhiên, họ KHÔNG thêm danh sách này vào cấu hình - thậm chí không phải là một tùy chọn trong Quản trị viên Mage để chúng tôi tự cấu hình danh sách này.
Giải pháp cho lỗi - Đăng nhập tệp không ghi dữ liệu
Để giải quyết điều này, chỉ cần thực hiện một mục vào cơ sở dữ liệu trong core_config_data
bảng.
INSERT INTO core_config_data VALUES ( NULL, 'default', 0, 'dev/log/allowedFileExtensions', 'log,txt,html,csv' );
Xóa bộ nhớ cache đối tượng là tốt và bạn sẽ thấy dữ liệu ghi vào tệp nhật ký một lần nữa.
ls -lrt var/log/ | tail
Để tham khảo, vấn đề này là trên EE 1.14.2.0 với tất cả các bản vá bảo mật được áp dụng.
Tôi đã mở một vé với Hỗ trợ Magento về vấn đề này nhưng chưa nhận được phản hồi từ kỹ thuật viên. Tôi đang xếp hàng.
Điều thực sự làm tôi bối rối về lỗi này là Magento đã có một phương pháp để xác thực các phần mở rộng tệp nhật ký mà họ đã thêm thông qua SUPEE-10415 vào cuối năm 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;
}
Tại sao họ không sử dụng lại logic đó thay vì cố gắng tái tạo không hoàn chỉnh bánh xe đăng nhập?