3 Stimmen

Doppelte Logaussagen

Ich habe ein seltsames Problem, es könnte etwas Dummes sein, aber ich kann nicht herausfinden, wo das Problem liegt. Ich entwickle eine Anwendung auf CakePHP 2.x und wenn ich Daten vom Controller protokolliere, erscheint es zweimal im Protokoll. So etwas wie das:

  • 2013-05-24 11:50:19 Debug: Excel-Datei hochgeladen
  • 2013-05-24 11:50:19 Debug: Excel-Datei hochgeladen
  • 2013-05-24 11:50:19 Debug: Feuer Test
  • 2013-05-24 11:50:19 Debug: Feuer Test

Nur um etwas Spaß hinzuzufügen, es passiert nicht in allen Funktionen in diesem Controller, nur in zwei von sechs. Es nervt mich sehr und ich sehe nicht, in welche Richtung ich graben sollte, um es loszuwerden. Irgendwelche Ideen?

EDIT: OK, ich habe festgestellt, dass dies geschieht, wenn ich in einer Methode in zwei unterschiedliche Dateien protokolliere. Wenn ich die Zeile ändere: CakeLog::write('time'....); in CakeLog::write('debug'....); funktioniert alles einwandfrei. Wie in der folgenden Methode:

function file_upload() {
    if (!$this->request->data) {           
    } else {
        CakeLog::write('time', 'Arbeit beginnt um: ' . date('m/d/Y', strtotime("now")));

        $data = Sanitize::clean($this->request->data);

        CakeLog::write('debug', 'Testaussage');

        if ($data['Scrap']['excel_submittedfile']['type'] === 'application/vnd.ms-excel' && $data['Scrap']['csv_submittedfile']['type'] === 'text/csv') {
            $tmp_xls_file = $data['Scrap']['excel_submittedfile']['tmp_name'];
            $xls_file = $data['Scrap']['excel_submittedfile']['name'];
            $tmp_csv_file = $data['Scrap']['csv_submittedfile']['tmp_name'];
            $csv_file = $data['Scrap']['csv_submittedfile']['name'];
            $upload_dir = WWW_ROOT . "/files/";
            if (file_exists($upload_dir) && is_writable($upload_dir)) {
                if (move_uploaded_file($tmp_xls_file, $upload_dir . $xls_file) && move_uploaded_file($tmp_csv_file, $upload_dir . $csv_file)) {

                    CakeLog::write('debug', 'Excel-Datei hochgeladen');

                    $this->redirect(array('action' => 'edit', $xls_file, $csv_file));
                } else {
                    echo 'Upload fehlgeschlagen';
                }
            } else {
                echo 'Upload-Verzeichnis ist nicht beschreibbar oder existiert nicht.';
            }
        } else {
            echo 'Stellen Sie sicher, dass die Dateien im richtigen Format vorliegen';
        }
    }
}

Ich vermute, es hat etwas mit den Deklarationen der Protokolldateien in der bootstrap.php zu tun. Es ist also kein großes Problem, nur ärgerlich.

3voto

Ilie Pandia Punkte 1809

Dies geschieht, weil Ihr Anruf

CakeLog::write('time', 'start working at: ' . date('m/d/Y', strtotime("now")));

Bitte versuchen Sie, einen Protokolleintrag vom Typ "time" zu schreiben. Da kein Stream konfiguriert ist, um das zu verarbeiten, wird der CakeLog einen "default" Stream für Sie erstellen, um diesen Protokollaufruf zu verarbeiten.

Das Problem ist, dass ab sofort ein "default" Stream konfiguriert ist, der alle Protokolle erfasst und diese für Debug- und Fehlerprotokolle verdoppelt.

Die Lösung besteht darin, das Protokoll in der bootstrap.php-Datei wie folgt korrekt zu konfigurieren:

CakeLog::config('time_stream', array(
    'engine' => 'FileLog',
    'types' => array( 'time' ), //<--hier ist der Protokolltyp "time"
    'file' => 'time', //<-- das geht dann nach time.log
) );

Natürlich, wenn Sie andere Protokolltypen verwenden, müssen Sie auch Streams für diese konfigurieren, ansonsten wird wieder der Standard-Catch-All-Stream für Sie konfiguriert und Sie werden das gleiche Problem erneut haben.

Viel Glück!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X