2016-10-31 2 views
0

ich für eine Klasse einer Logger-Methode erstellt, der grundlegende Logging-Code ist dies:PHP Logging Code instabil, schreibt nur manchmal

// maximum length of file (in characters/bytes) 
    $maxlength = 40000; 
    $filename = "logs/$this->account_id.log"; 

    // add to the first line 
    $fileContent = file_exists($filename) ? file_get_contents($filename, NULL, NULL, NULL, $maxlength) : ""; 
    file_put_contents($filename, '['.date('d-m-Y- H:i:s').'] - '.$message.PHP_EOL. $fileContent); 

Es macht sicher, dass die neuesten Protokolleinträge zuerst erscheinen. Alles funktioniert gut, außer einige Nachrichten werden protokolliert und nach einer Weile wieder auf 3 Tage zurückgesetzt.

Datei hat Schreibberechtigungen, irgendwelche Ideen, was könnte los sein?

Antwort

1

Es ist sehr wahrscheinlich, dass es sich um eine Nebenläufigkeit handelt. Sie haben für jeden Benutzer eine separate Protokolldatei, aber ein Benutzer könnte in kurzer Zeit mehrere Anforderungen senden, was zu dem unerwünschten Ergebnis führt, dass mehrere Protokolle gleichzeitig ausgegeben werden. Sie müssen eine Art von Warteschlange entweder in einer Datenbank oder in einem eigenständigen Dienst erstellen, der die Nachrichten empfängt und nur dafür verantwortlich ist, in die Protokolldatei zu schreiben.

Beispiellösung:

  • Du eine RDBMS-Tabelle user_log (account_id, Nachricht, Zeitstempel) erstellen, wenn ein neues Protokoll benötigt wird. Auf diese Weise können tatsächlich das System wissen, dass Sie einige Protokolle zu speichern beabsichtigen
  • Sie einen cron-Job erstellen, die in regelmäßigen Abständen sehen, was der Benutzer-Log-Dateien geändert werden müssen, und ändern Sie sie