Mage :: log () non funziona sul nuovo aggiornamento di Magento (1.9.4.1)


23

Dopo questo nuovo aggiornamento (1.9.4.1), Mage :: log () non funziona. Apparentemente, ha qualcosa a che fare con la Zend_Validate_File_Extensionlinea 819 su Mage.php dove controlla se il file is_readable()prima ancora esiste. Ho invertito l'intero log()metodo alla versione precedente e funziona di nuovo.

Qual è il canale principale con cui posso contattare il team di Magento per segnalare questo problema?


1
@PiotrSiejczuk Non funziona per i nuovi file di registro. Il tuo secondo commento implica che la possibilità di modificare la configurazione della rotazione dei registri rende questo non un problema serio e non sono completamente d'accordo. Il tuo primo commento implica che questo è probabilmente solo un problema per OP, o in una sorta di caso limite, e anche io non sono molto d'accordo. Capisco perfettamente perché Magento non avrebbe notato questo errore, ma queste implicazioni sono l'opposto di ciò che è necessario qui (che siano intenzionali o meno).
toon81,

3
Esistono molte situazioni in cui ciò è problematico: installazioni pulite (in questo caso il system.log non esiste ancora), creazione / installazione di moduli locali e di terze parti che accedono a file di registro personalizzati, logrotano configurazioni che non creano / conservare il file di registro originale.
Aad Mathijssen,

3
Sì, la registrazione è essenziale per ogni software, mi chiedo perché lo abbiano lasciato passare. Il mio sogno è che quando arriva il 2020 e il team di Magento smette di supportare 1.x, caricano la loro ultima versione su un repository Git ufficiale in modo che la community possa tenerlo aggiornato
rodrigoriome,

1
@cslogic "Il mio sogno è che quando arriva il 2020 e il team Magento smette di supportare 1.x, caricano la loro ultima versione su un repository Git ufficiale in modo che la community possa tenerlo aggiornato" => Già fatto con OpenMage LTS: github. com / OpenMage / magento-lts
Frédéric MARTINEZ,

1
@ FrédéricMARTINEZ è divertente, Ben Marks in realtà mi ha raccontato di quel repository circa 30 minuti prima di leggere il tuo commento .. Grazie comunque, lo guarderò
rodrigoriome

Risposte:



7

Riassumo tutto ciò che ho trovato finora basandomi sulla ricerca e l'interazione con Magento sia sul supporto che su Slack per quanto riguarda il patching con SUPEE-11086. Cosa si può fare:

AGGIORNAMENTO 2: il problema è stato risolto nel prossimo PATCH SUPEE-11155 - https://magento.com/security/patches/supee-11155 . Come sempre prima di applicare il patch check per i possibili problemi thread - Security Patch SUPEE-11155 - Possibili problemi? Grazie ad Aad Mathijssen per l'ottimo commento.

Aggiornamento: una patch ufficiale è disponibile su richiesta per la versione EE. Fondamentalmente, è l'essenza di Piotr Kaminski racchiusa come file patch Magento.

  1. Elimina le modifiche app/Mage.phpnel file patch. Questo è quello che ho fatto finora.
    Pro: la registrazione funziona come prima.
    Contro: modificando un file patch, la registrazione non è protetta da un possibile exploit (ma questo dovrebbe essere a rischio molto basso). Quando Magento rilascia una correzione ufficiale, dovrai ripristinarla e applicare la patch originale non modificata.
  2. Aggiungi un'altra patch in cima basata sull'essenza di Piotr Kaminski - https://gist.github.com/piotrekkaminski/0596cae2d25bf467edbd3d3f03ab9f8f . Piotr Kaminski fa parte di Magento responsabile della sicurezza, quindi questo viene direttamente dalla bocca del cavallo. Gist è stato condiviso in Magento e probabilmente finirà come SUPEE-11086 v1.1.
    Pro - Questo è il modo Magento
    Contro - Dovrai aspettare che questo diventi ufficiale, o assumerti la responsabilità e impacchettarlo come patch tu stesso, che ti riporterà a dover ripristinare una volta che una patch ufficiale è attiva.
    Una leggera variazione sarebbe invece di aggiungere due patch per modificare quella originale con quelle modifiche.
  3. Modifica Zend_Validate_File_Extension::isValide rimuovi la convalida dell'esistenza del file. c'è una lunga discussione in Magith LTS github - https://github.com/OpenMage/magento-lts/pull/648 . Il isValidmetodo fa cose che non ci si aspetta che faccia, quindi alcuni membri propongono di risolverlo. La mia opinione è che questa non è una buona soluzione, sì, il codice è cattivo, ma è stato lì per sempre e può essere utilizzato in moduli / codice personalizzati. Al contrario, il peggio che può accadere è che i file non vengono controllati per l'esistenza.
    Pro - una soluzione piuttosto semplice
    Contro - cambia un file di libreria e ne modifica la funzionalità.
    Puoi applicarlo come patch personalizzata o riscrivendo l'intera classe nel localpool di codici.

Ho scelto di modificare la patch e, quando arriva una v1.1, ripristinerò la patch modificata e applicherò la versione originale e dopo quella correzione. Questo si adatta bene al nostro processo di costruzione e alla politica interna, potrebbe essere diverso per te. Indipendentemente da ciò che hai scelto, è meglio applicare questa patch prima che dopo.


1
A partire dal 25 giugno, Magento ha rilasciato SUPEE-11155, Magento Commerce 1.14.4.2 e Magento Open Source 1.9.4.2 che includono una correzione per questo problema. In sostanza, è stata inclusa la patch di Piotr Kaminski.
Aad Mathijssen, il

4

Qualcosa dagli input della community. C'è un nuovo validatore utilizzato Zend_Validate_File_Extension come di seguito:

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

"La soluzione sta modificando la patch e rimuovendo semplicemente le modifiche dall'app / Mage.php scoraggerei fortemente questa pratica, ma la situazione è critica".


È davvero una cattiva pratica, ma non riesco a sopravvivere senza registrarmi. Spero che Adobe possa risolverlo presto
rodrigoriome il

sì, ho dovuto ricreare tutti i file di registro perché lo script logrotator stava eliminando i file e creando zip di essi. Avrò bisogno di trovare una sceneggiatura migliore di Magento che non risolva questo problema.
Kalvin Klien,

1
@KalvinKlien: Hai provato con: opzione copytruncate di logrotate? "Troncare il file di registro originale alla dimensione zero in atto dopo aver creato una copia, anziché spostare il vecchio file di registro e crearne uno nuovo facoltativamente. Può essere utilizzato quando alcuni programmi non possono dire di chiudere il suo file di registro e quindi potrebbero continuare a scrivere ( aggiungendo) al file di registro precedente per sempre. Si noti che c'è un intervallo di tempo molto piccolo tra la copia del file e il suo troncamento, quindi alcuni dati di registrazione potrebbero andare persi. Quando si utilizza questa opzione, l'opzione di creazione non avrà alcun effetto, poiché il vecchio file di registro rimane in posizione ".
Piotr Siejczuk,

Grazie @PiotrSiejczuk! Ho usato questo: / path / var / log / * log {ruota 7 copiatruncate compress giornaliere missingok notifempty}
Kalvin Klien

1

La mia soluzione temporanea era quello di copiare lib/Zend/Validate/File/Extension.phpa app/code/local/Zend/Validate/File/Extension.phpe rimuovere questa parte del codice dal isValid()metodo:

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

Diventerebbe ...

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

Quando viene rilasciato Magento 1.9.4.2, lo ricontrollo.

In effetti, il file non è leggibile o non esiste, non significa che il nome del file non sia valido, giusto?



0

C'è un altro problema (che può essere deliberato dal team di Magento) che impedisce la possibilità di scrivere file di registro all'interno delle sottocartelle. Per esempio:

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

Nelle versioni precedenti, quella chiamata avrebbe creato un file nella posizione:

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

Ma poiché basename()nel Mage::log()metodo è presente una chiamata di funzione , il file viene scritto in:

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

Ecco il codice incriminato in app/Mage.php:

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

Anche se non è particolarmente correlato a 1.9.4.1, il problema ha iniziato a verificarsi di recente (intorno alle ultime versioni 1.9.3.x) ed è molto fastidioso quando si devono gestire molti file di registro, a volte con lo stesso nome ( ma inizialmente in diverse sottocartelle).

Dato che quel pezzo di codice è probabilmente deliberato dal team di Magento, penso che non ci siano piani per risolverlo in un'ulteriore versione, il che implica hackerarlo per ripristinare il comportamento iniziale ...


Per quel problema di sottocartella non ne ho idea, ma per l'effettivo problema di registrazione stiamo per quel pezzo di codice gist.github.com/piotrekkaminski/…
rodrigoriome
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.