syslog () ist eine integrierte Funktion in PHP, die Nachrichten an das Systemprotokoll sendet. Im Gegensatz zum direkten Schreiben in Dateiprotokolle wird Syslog () die Protokolle in den Protokolldateien des Betriebssystems (z. B./var/log/syslog oder /var/log/messus ) aufgezeichnet, was für Systemadministratoren eine sehr bequeme Möglichkeit ist, Protokolle zentral zu verwalten.
Die grundlegende Verwendung der Funktion syslog () ist wie folgt:
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$priority</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$message</span></span><span>);
</span></span>
$ Priorität : Die Priorität von Protokollnachrichten. Die von PHP unterstützten Prioritätsstufen sind:
LOG_EMERG : Das System ist nicht verfügbar
Log_alert : Sofortige Maßnahmen erforderlich
Log_crit : kritischer Fehler
Log_err : Allgemeiner Fehler
LOG_WARNING : Warnnachricht
Log_notice : normales, aber wichtiges Ereignis
Log_info : Allgemeine Informationen
Log_debug : debug -Informationen
$ meldung : Die zu erfasste Protokollnachricht, normalerweise von einem Zeichenfolge -Typ.
Bevor Sie Syslog () in PHP verwenden, müssen Sie normalerweise die Funktion OpenLog () aufrufen, um die Protokollierungssitzung zu initialisieren. OpenLog () Gibt die Protokollkennung, die Protokollkategorie und die Priorität der Protokollverarbeitung an.
<span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span></span>
Parameterbeschreibung:
'MyApp' : Die Protokollkennung, die der Name Ihrer Anwendung sein kann, hilft, die Protokolle verschiedener Anwendungen zu unterscheiden.
LOG_CONS : Wenn das Systemprotokoll nicht verfügbar ist, geben Sie den Standardfehler aus.
LOG_PID : Enthält die Prozess -ID in jeder Protokollnachricht.
LOG_NDELAY : Öffnen Sie sofort die Protokollsitzung und warten Sie nicht, bis die Protokollinformationen vor dem Start geschrieben wurden.
Log_local1 : Geben Sie die Protokollkategorie an, Sie können die lokale Protokollebene auswählen (z. B. log_local0 zu log_local7 ).
Normalerweise werden Protokollierungsfehlerprotokolle durchgeführt, nachdem eine Ausnahme oder ein Fehler erfasst wurde. Angenommen, in Ihrer PHP -Anwendung gibt es eine Datenbankverbindungsoperation. Wenn die Datenbankverbindung ausfällt, müssen Sie möglicherweise den Fehler beim Systemprotokoll protokollieren.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-comment">// Angenommen, es ist der Code für die Datenbankverbindung</span></span><span>
</span><span><span class="hljs-variable">$db</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_ERR, </span><span><span class="hljs-string">'Database connection failed: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>());
}
</span><span><span class="hljs-title function_ invoke__">closelog</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Wenn die Datenbankverbindung im obigen Code fehlschlägt, zeichnet die Funktion syslog () die Fehlermeldung im Systemprotokoll auf. Priorität log_err bedeutet, dass dies ein allgemeiner Fehler ist.
Zusätzlich zu den Aufzeichnungsmeldungen kann Syslog () auch verwendet werden, um einige allgemeine Informationen wie den Anwendungsstatus, die Schlüsselvorgänge usw. aufzuzeichnen. Zum Beispiel:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_INFO, </span><span><span class="hljs-string">'Application started successfully.'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_NOTICE, </span><span><span class="hljs-string">'User logged in with ID: 12345.'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">closelog</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Dieser Code zeigt, wie Protokolle auf Informationsebene protokolliert werden. Log_info repräsentiert allgemeine Informationen, während log_notice verwendet werden kann, um einige Ereignisse aufzuzeichnen, die Aufmerksamkeit erfordern.
Die Funktion syslog () selbst unterstützt keine benutzerdefinierten Protokollformate. Sie können jedoch Nachrichten manuell formatieren, bevor Sie das Protokoll senden, zum Beispiel:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span><span><span class="hljs-variable">$userId</span></span><span> = </span><span><span class="hljs-number">12345</span></span><span>;
</span><span><span class="hljs-variable">$action</span></span><span> = </span><span><span class="hljs-string">'User logged in'</span></span><span>;
</span><span><span class="hljs-variable">$logMessage</span></span><span> = </span><span><span class="hljs-title function_ invoke__">sprintf</span></span><span>(</span><span><span class="hljs-string">'UserID: %d - Action: %s'</span></span><span>, </span><span><span class="hljs-variable">$userId</span></span><span>, </span><span><span class="hljs-variable">$action</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_NOTICE, </span><span><span class="hljs-variable">$logMessage</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">closelog</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Hier verwenden wir die Funktion Sprintf (), um Protokollinhalte dynamisch zu generieren und sie als Zeichenfolge an syslog () zu übergeben.
Von Syslog aufgezeichnete Informationen werden normalerweise in die Systemprotokolldatei geschrieben. Sie können den Ausgabestandort des Protokolls in der Systemkonfigurationsdatei angeben. Bei Linux -Systemen werden Protokolle normalerweise in /var/log/syslog oder /var/log/messages gespeichert.
Sie können die Protokolle anzeigen nach:
<span><span><span class="hljs-built_in">tail</span></span><span> -f /var/log/syslog
</span></span>
Protokoll nicht geschrieben : Stellen Sie sicher, dass Syslog in der PHP -Konfigurationsdatei aktiviert ist, und überprüfen Sie die Berechtigungen der Systemprotokolldatei.
Zu große Protokolldateien : Langfristige Protokollierung kann dazu führen, dass Protokolldateien sehr groß werden. Alte Protokolle können regelmäßig durch den Log -Rotationsmechanismus gereinigt und archiviert werden.
Ausgabe von Protokollberechtigungen : Stellen Sie sicher, dass der PHP -Prozess ausreichende Berechtigung hat, Informationen an das Systemprotokoll zu schreiben. Wenn die Berechtigungen nicht ausreichend sind, müssen Sie möglicherweise die Berechtigungen der Systemprotokolldatei anpassen.