現在の位置: ホーム> 最新記事一覧> Syslog関数呼び出しを使用して、サーバーレベルのエラーログを記録する方法は?

Syslog関数呼び出しを使用して、サーバーレベルのエラーログを記録する方法は?

gitbox 2025-06-23

1。syslog ()関数の概要

syslog()は、PHPの組み込み関数であり、システムログにメッセージを送信します。ファイルログに直接書き込むのとは異なり、 syslog()はシステム管理者がログを中央に管理するための非常に便利な方法です。

2。syslog ()関数を使用する基本的な構文

syslog()関数の基本的な使用法は次のとおりです。

 <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>
  • $優先度:ログメッセージの優先度。 PHPがサポートする優先レベルは次のとおりです。

    • log_emerg :システムは使用できません

    • log_alert :即時の測定が必要です

    • log_crit :クリティカルエラー

    • log_err :一般的なエラー

    • log_warning :警告メッセージ

    • log_notice :通常の重要なイベント

    • log_info :一般情報

    • log_debug :デバッグ情報

  • $メッセージ:記録するログメッセージ、通常は文字列タイプのものです。

3。syslogを構成します

PHPでsyslog()を使用する前に、通常、 openlog()関数を呼び出してロギングセッションを初期化する必要があります。 OpenLog()ログ識別子、ログカテゴリ、およびログ処理の優先度を指定します。

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

パラメーター説明:

  • 「MyApp」 :アプリケーションの名前になる可能性のあるログ識別子は、異なるアプリケーションのログを区別するのに役立ちます。

  • log_cons :システムログが使用できない場合は、標準エラーに出力します。

  • log_pid :各ログメッセージにプロセスIDを含めます。

  • log_ndelay :ログセッションをすぐに開き、開始する前にログ情報が記述されるまで待たないでください。

  • log_local1 :logカテゴリを指定して、ローカルログレベル( log_local0からlog_local7など)を選択できます。

4。ログエラーログ

通常、ロギングエラーログは、例外またはエラーがキャッチされた後に実行されます。 PHPアプリケーションにデータベース接続操作があると仮定します。データベース接続が失敗した場合、エラーをシステムログにログに記録する必要がある場合があります。

 <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">// データベース接続のコードであると仮定します</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>

上記のコードでは、データベース接続が失敗すると、 syslog()関数はエラーメッセージをシステムログに記録します。 log_errの優先度は、これが一般的なエラーであることを意味します。

5.カスタムログを記録します

エラーメッセージの記録に加えて、 syslog()を使用して、アプリケーションステータス、キー操作などの一般的な情報を記録することもできます。

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

このコードは、情報レベルのログを記録する方法を示しています。 log_infoは一般的な情報を表しますが、 log_noticeを使用して注意が必要なイベントを記録できます。

6。高度な使用法:カスタムログ形式

syslog()関数自体は、カスタムログ形式をサポートしていません。ただし、例えば、ログを送信する前に、メッセージを手動でフォーマットすることができます。

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

ここでは、 sprintf()関数を使用してログコンテンツを動的に生成し、 syslog()に文字列として渡します。

7。syslogの出力場所を構成します

Syslogによって記録された情報は、通常、システムログファイルに書き込まれます。システム構成ファイルにログの出力位置を指定できます。 Linuxシステムでは、通常、ログは/var/log/syslogまたは/var/log/メッセージに保存されます。

ログを次のように表示できます。

 <span><span><span class="hljs-built_in">tail</span></span><span> -f /var/log/syslog
</span></span>

8。FAQとソリューション

  • 記述されていないログ:SyslogがPHP構成ファイルで有効になっていることを確認し、システムログファイルの権限を確認してください。

  • ログファイルが大きすぎる:長期ロギングにより、ログファイルが非常に大きくなる可能性があります。古いログは、ログの回転メカニズムを介して定期的にクリーニングおよびアーカイブできます。

  • ログ許可の問題:PHPプロセスがシステムログに情報を書き込むのに十分な許可を持っていることを確認してください。アクセス許可が不十分な場合は、システムログファイルの権限を調整する必要がある場合があります。