Aktueller Standort: Startseite> Neueste Artikel> Wie verwendete ich Syslog-Funktionsaufrufe, um Fehlerprotokolle auf Serverebene aufzunehmen?

Wie verwendete ich Syslog-Funktionsaufrufe, um Fehlerprotokolle auf Serverebene aufzunehmen?

gitbox 2025-06-23

1. Einführung in die Funktion syslog ()

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.

2. Grundlegende Syntax der Verwendung von syslog () -Funktionen

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.

3. Konfigurieren Sie Syslog

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 ).

4. Protokoll -Fehlerprotokollprotokoll

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">&lt;?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>-&gt;</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">?&gt;</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.

5. benutzerdefinierte Protokolle protokollieren

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">&lt;?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">?&gt;</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.

6. Erweiterte Verwendung: benutzerdefiniertes Protokollformat

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">&lt;?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">?&gt;</span></span><span>
</span></span>

Hier verwenden wir die Funktion Sprintf (), um Protokollinhalte dynamisch zu generieren und sie als Zeichenfolge an syslog () zu übergeben.

7. Konfigurieren Sie den Ausgangsort von Syslog

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>

8. FAQs und Lösungen

  • 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.