Mage :: log () không hoạt động trên bản cập nhật Magento mới (1.9.4.1)


23

Sau bản cập nhật mới này (1.9.4.1), Mage :: log () không hoạt động. Rõ ràng, nó có một cái gì đó để làm với Zend_Validate_File_Extensiondòng 819 tại Mage.php nơi nó kiểm tra xem tập tin is_readable()trước khi nó tồn tại. Tôi đã đảo ngược toàn bộ log()phương thức về phiên bản trước đó và nó đang hoạt động trở lại.

Kênh chính mà tôi có thể liên hệ với nhóm Magento để báo cáo vấn đề này là gì?


1
@PiotrSiejczuk Điều đó không hoạt động đối với các tệp nhật ký mới. Nhận xét thứ hai của bạn ngụ ý rằng khả năng thay đổi cấu hình xoay vòng log khiến đây không phải là vấn đề nghiêm trọng và tôi hoàn toàn không đồng ý. Nhận xét đầu tiên của bạn ngụ ý rằng đây có lẽ chỉ là một vấn đề đối với OP, hoặc trong một số trường hợp cạnh, và tôi rất không đồng ý với điều đó, quá. Tôi hoàn toàn hiểu tại sao Magento sẽ không nhận thấy lỗi này, nhưng những hàm ý này trái ngược với những gì cần thiết ở đây (cho dù chúng có chủ ý hay không).
toon81

3
Có nhiều tình huống xảy ra sự cố: cài đặt sạch (trong trường hợp này system.log chưa tồn tại), tạo / cài đặt các mô-đun cục bộ và bên thứ ba đăng nhập vào tệp nhật ký tùy chỉnh, cấu hình logrotate không tạo / giữ tệp nhật ký gốc.
Aad Mathijssen

3
Vâng, đăng nhập là điều cần thiết cho mọi phần mềm, tôi tự hỏi tại sao họ lại để điều đó trôi qua. Ước mơ của tôi là khi năm 2020 đến và nhóm Magento ngừng hỗ trợ 1.x, họ tải phiên bản cuối cùng của họ lên một repo Git chính thức để cộng đồng có thể cập nhật thông tin
Rodrigoriome

1
@cslogic "Ước mơ của tôi là khi năm 2020 đến và nhóm Magento ngừng hỗ trợ 1.x, họ tải lên phiên bản cuối cùng của họ lên một repo Git chính thức để cộng đồng có thể cập nhật" => Đã được thực hiện với OpenMage LTS: github. com / OpenMage / magento-lts
Frédéric MARTINEZ

1
@ FrédéricMARTINEZ thật buồn cười, Ben Marks thực sự đã nói với tôi về repo đó khoảng 30 phút trước khi tôi đọc bình luận của bạn .. Dù sao cũng cảm ơn, hãy xem nó
Rodrigoriome

Câu trả lời:



7

Tôi sẽ tóm tắt mọi thứ tôi tìm thấy cho đến nay dựa trên nghiên cứu và tương tác với Magento cả hỗ trợ và Slack liên quan đến việc vá lỗi với SUPEE-11086. Những gì có thể được thực hiện:

CẬP NHẬT 2: Vấn đề được giải quyết trong SUPCH SUPEE-11155 tiếp theo - https://magento.com/security/patches/supee-11155 . Như mọi khi trước khi áp dụng kiểm tra bản vá cho luồng sự cố có thể xảy ra - Bản vá bảo mật SUPEE-11155 - Sự cố có thể xảy ra? Cảm ơn đến Aad Mathijssen cho nhận xét tuyệt vời.

Cập nhật: Một bản vá chính thức có sẵn theo yêu cầu cho phiên bản EE. Về cơ bản, đó là ý chính của Piotr Kaminski được gói dưới dạng tệp vá Magento.

  1. Xóa các thay đổi app/Mage.phptrong tệp vá. Đây là những gì tôi đã làm cho đến nay.
    Ưu điểm - đăng nhập hoạt động như trước.
    Nhược điểm - chỉnh sửa tệp vá, ghi nhật ký không được bảo vệ khỏi khả năng khai thác (nhưng điều này sẽ có rủi ro rất thấp). Khi Magento phát hành bản sửa lỗi chính thức, bạn sẽ phải hoàn nguyên nó và áp dụng Bản vá chưa được chỉnh sửa ban đầu.
  2. Thêm một bản vá khác trên đầu dựa trên ý chính của Piotr Kaminski - https://gist.github.com/piotrekk vitaminki / 596cae2d25bf467edbd3d3f03ab9f8f . Piotr Kaminski là một phần của Magento phụ trách an ninh, vì vậy điều này xuất phát trực tiếp từ miệng ngựa. Gist đã được chia sẻ trong Magento slack và có thể sẽ kết thúc với tên SUPEE-11086 v1.1.
    Ưu điểm - Đây là cách Magento
    Nhược điểm - Bạn sẽ phải chờ đợi điều này trở thành chính thức, hoặc chịu trách nhiệm và tự đóng gói nó như một bản vá, điều này sẽ đưa bạn trở lại phải hoàn nguyên một khi bản vá chính thức được đưa ra.
    Một thay đổi nhỏ sẽ là thay vì thêm hai bản vá để chỉnh sửa bản gốc với những thay đổi đó.
  3. Chỉnh sửa Zend_Validate_File_Extension::isValidvà xóa xác thực tồn tại tập tin. có một cuộc thảo luận dài trong Magento LTS github - https://github.com/OpenMage/magento-lts/pull/648 . Các isValidphương pháp làm những điều nó không mong đợi để làm, vì vậy một số thành viên đề xuất để sửa chữa nó. Ý kiến ​​của tôi là đây không phải là một giải pháp tốt, có mã là xấu, nhưng nó tồn tại mãi mãi và có thể được sử dụng trong các mô-đun / mã tùy chỉnh. Ngược lại, điều tồi tệ nhất có thể xảy ra là các tệp không được kiểm tra sự tồn tại.
    Ưu điểm - một sửa chữa khá đơn giản
    Nhược điểm - thay đổi tệp thư viện và sửa đổi chức năng của nó.
    Bạn có thể áp dụng điều này như là một bản vá tùy chỉnh hoặc bằng cách viết lại toàn bộ lớp trong nhóm localmã.

Tôi đã chọn chỉnh sửa bản vá và khi v1.1 xuất hiện, tôi sẽ hoàn nguyên bản vá đã chỉnh sửa và áp dụng phiên bản gốc và sau bản sửa lỗi đó. Điều này rất phù hợp với quá trình xây dựng và chính sách nội bộ của chúng tôi, nó có thể khác với bạn. Không có vấn đề gì bạn chọn, tốt hơn là áp dụng bản vá này sớm hơn sau này.


1
Kể từ ngày 25 tháng 6, Magento đã phát hành SUPEE-11155, Magento Commerce 1.14.4.2 và Magento Open Source 1.9.4.2 bao gồm một bản sửa lỗi cho vấn đề này. Về cơ bản, bản vá của Piotr Kaminski đã được đưa vào.
Aad Mathijssen

4

Một cái gì đó từ Đầu vào cộng đồng. Có một Trình xác thực mới được sử dụng Zend_Validate_File_Extension theo bên dưới:

https://github.com/brentwpeterson/magento-patches/blob/master/CE1.9/PATCH_SUPEE-11086_CE_1.9.4.0_v1-2019-03-26-03-05-04.sh#L183

"Giải pháp là chỉnh sửa bản vá và chỉ xóa các thay đổi khỏi app / Mage.php. Tôi sẽ không khuyến khích thực hành này, nhưng tình hình rất nghiêm trọng".


Đây thực sự là một thực tế tồi tệ, nhưng tôi không thể tồn tại mà không đăng nhập. Hy vọng Adobe có thể khắc phục sớm
Rodrigoriome

vâng tôi phải tạo lại tất cả các tệp nhật ký vì tập lệnh logrotator đang xóa các tệp và tạo các tệp của chúng. Tôi sẽ cần tìm một kịch bản tốt hơn của magento không sửa thi.
Kalvin Klien

1
@KalvinKlien: Bạn đã thử với: tùy chọn copytruncate của logrotate chưa? "Cắt tệp nhật ký gốc về kích thước 0 tại chỗ sau khi tạo bản sao, thay vì di chuyển tệp nhật ký cũ và tùy ý tạo tệp mới. Nó có thể được sử dụng khi một số chương trình không thể được yêu cầu đóng tệp logfile của nó và do đó có thể tiếp tục ghi ( gắn thêm vào tệp nhật ký trước đó mãi mãi. Lưu ý rằng có một khoảng thời gian rất nhỏ giữa việc sao chép tệp và cắt bớt nó, do đó một số dữ liệu ghi nhật ký có thể bị mất. Khi tùy chọn này được sử dụng, tùy chọn tạo sẽ không có hiệu lực, vì tệp nhật ký cũ giữ nguyên vị trí ".
Piotr Siejczuk

Cảm ơn @PiotrSiejczuk! Tôi sử dụng này: / path / var / log / * log {xoay 7 copytruncate hàng ngày nén missingok notifempty}
Kalvin Klien

1

Giải pháp tạm thời của tôi đã được sao chép lib/Zend/Validate/File/Extension.phpvào app/code/local/Zend/Validate/File/Extension.phploại bỏ phần này của mã từ isValid()phương pháp:

    // Is file readable ?
    #require_once 'Zend/Loader.php';
    if (!Zend_Loader::isReadable($value)) {
        return $this->_throw($file, self::NOT_FOUND);
    }

Nó sẽ trở thành ...

public function isValid($value, $file = null)
{
    if ($file !== null) {
        $info['extension'] = substr($file['name'], strrpos($file['name'], '.') + 1);
    } else {
        $info = pathinfo($value);
...

Khi Magento 1.9.4.2 được phát hành, tôi kiểm tra lại.

Trong thực tế, tệp không thể đọc được hoặc không tồn tại, không có nghĩa là tên tệp không hợp lệ, phải không?



0

Có một vấn đề khác (có thể được cố tình từ nhóm Magento) ngăn cản khả năng ghi tệp nhật ký bên trong các thư mục con. Ví dụ:

Mage::log('Some log information', Zend_Log::DEBUG, 'somefolder/anotherfolder/somelogfile.log', true);

Trong các phiên bản trước, cuộc gọi đó sẽ tạo một tệp tại vị trí:

/your-magento-app-root-folder/var/log/somefolder/anotherfolder/somelogfile.log

Nhưng vì có một basename()hàm gọi trong Mage::log()phương thức, nên tệp được ghi tại:

/your-magento-app-root-folder/var/log/somelogfile.log.

Đây là mã được phân tích trong app/Mage.php:

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

Ngay cả khi nó không liên quan đặc biệt đến 1.9.4.1, vấn đề đã bắt đầu xảy ra gần đây (khoảng các phiên bản 1.9.3.x mới nhất) và rất khó chịu khi bạn phải xử lý nhiều tệp nhật ký, đôi khi có cùng tên ( nhưng ban đầu trong các thư mục con khác nhau).

Vì đoạn mã đó có thể được cố tình từ nhóm Magento, tôi nghĩ rằng không có kế hoạch sửa nó trong một bản phát hành tiếp theo, ngụ ý là hack nó để khôi phục hành vi ban đầu ...


Cho rằng vấn đề thư mục con tôi không có đầu mối, nhưng đối với vấn đề khai thác gỗ thực tế chúng ta đang đứng cho rằng đoạn mã gist.github.com/piotrekkaminski/...
rodrigoriome
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.