【PHP8.x】syslog()関数の使い方
syslog関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
syslog関数は、Unix系のオペレーティングシステムで動作するシステムログデーモン(syslogd)にメッセージを送信する関数です。この関数を利用することで、PHPアプリケーションから発生したイベント、エラー、デバッグ情報などをシステムの標準的なログ記録メカニズムを通じて記録することができます。これにより、システムの運用状況の監視や、問題発生時の原因究明に役立てることが可能です。
この関数は主に二つの引数を取ります。第一引数 $priority は、ログメッセージの重要度(レベル)とそのメッセージがどの機能(ファシリティ)から発生したかを示す値を指定します。たとえば、LOG_ERRはエラーレベルのメッセージ、LOG_INFOは情報レベルのメッセージを示し、LOG_USERはユーザーアプリケーションからのメッセージであることを表します。これらの値は通常、PHPの定義済み定数をビットOR演算子 | で組み合わせて指定します。第二引数 $message には、ログとして記録したい具体的なテキストメッセージを渡します。
syslog関数は、ログメッセージの送信に成功した場合に true を、失敗した場合に false を返します。より詳細なログ設定や識別子の指定を行いたい場合は、openlog() 関数でログ接続を開き、closelog() 関数で閉じることで、ログの管理をより柔軟に行うことができます。この関数は、システムの安定稼働を支える重要なツールの一つです。
構文(syntax)
1<?php 2syslog(LOG_INFO | LOG_USER, "これはテストメッセージです。"); 3?>
引数(parameters)
int $priority, string $message
- int $priority: ログの優先度を指定する整数。
LOG_EMERG(緊急) からLOG_DEBUG(デバッグ) までの定数を使用します。 - string $message: ログとして記録するメッセージを指定する文字列。
戻り値(return)
bool
syslog関数は、メッセージの送信が成功した場合はTRUEを、失敗した場合はFALSEを返します。
サンプルコード
PHP syslog関数でシステムログを送信する
1<?php 2 3/** 4 * PHPのsyslog関数を使用してシステムログにメッセージを送信するサンプル関数。 5 * システムエンジニアを目指す初心者がsyslogの基本的な使い方を理解するのに役立ちます。 6 * 7 * @param string $identifier ログメッセージに付加される識別子(例: プログラム名)。 8 * @return bool 全てのログメッセージの送信処理が成功した場合はtrue、そうでなければfalse。 9 */ 10function logSystemMessages(string $identifier = 'MyPHPScript'): bool 11{ 12 // openlog() で syslog への接続を開きます。 13 // 第1引数 ($identifier): ログメッセージの識別子として表示されます。 14 // 第2引数 (LOG_PID | LOG_PERROR): プロセスIDを含め、syslog()の失敗時は標準エラー出力にも出力するオプション。 15 // 第3引数 (LOG_USER): ユーザーレベルのファシリティ(ログの種類)を使用します。 16 if (!openlog($identifier, LOG_PID | LOG_PERROR, LOG_USER)) { 17 // 接続に失敗した場合、エラーログに出力して処理を終了します。 18 error_log("syslog 接続を開けませんでした。パーミッションまたはシステム設定を確認してください。"); 19 return false; 20 } 21 22 echo "syslog 接続を開きました。\n"; 23 $allMessagesSentSuccessfully = true; 24 25 // syslog() でログメッセージを送信します。 26 // 第1引数: 優先度(重要度、例: LOG_INFO, LOG_WARNING, LOG_ERR)。 27 // 第2引数: ログに記録するメッセージ。 28 29 // 優先度: LOG_INFO (情報レベル) - 一般的な情報メッセージ。 30 $infoMsg = "これは情報レベルのメッセージです。"; 31 if (syslog(LOG_INFO, $infoMsg)) { 32 echo "LOG_INFO メッセージを送信しました: '{$infoMsg}'\n"; 33 } else { 34 echo "LOG_INFO メッセージの送信に失敗しました。\n"; 35 $allMessagesSentSuccessfully = false; 36 } 37 38 // 優先度: LOG_WARNING (警告レベル) - 注意が必要な状況。 39 $warningMsg = "これは警告レベルのメッセージです。"; 40 if (syslog(LOG_WARNING, $warningMsg)) { 41 echo "LOG_WARNING メッセージを送信しました: '{$warningMsg}'\n"; 42 } else { 43 echo "LOG_WARNING メッセージの送信に失敗しました。\n"; 44 $allMessagesSentSuccessfully = false; 45 } 46 47 // 優先度: LOG_ERR (エラーレベル) - プログラムの機能に影響を与えるエラー。 48 $errorMsg = "これはエラーレベルのメッセージです。"; 49 if (syslog(LOG_ERR, $errorMsg)) { 50 echo "LOG_ERR メッセージを送信しました: '{$errorMsg}'\n"; 51 } else { 52 echo "LOG_ERR メッセージの送信に失敗しました。\n"; 53 $allMessagesSentSuccessfully = false; 54 } 55 56 // closelog() で syslog への接続を閉じます。 57 closelog(); 58 echo "syslog 接続を閉じました。\n"; 59 60 echo "\nこれらのメッセージは、通常、システムのログファイルに記録されます。\n"; 61 echo "確認するには、root権限で 'sudo tail -f /var/log/syslog' などのコマンドを実行してください。\n"; 62 63 return $allMessagesSentSuccessfully; 64} 65 66// 上記の関数を実行し、システムログにメッセージを送信します。 67// 'MyPHPApp' がログメッセージの識別子として使用されます。 68logSystemMessages('MyPHPApp'); 69
syslog関数は、PHPアプリケーションからオペレーティングシステムのログ機能(syslogデーモン)にメッセージを送信するために使用されます。これにより、プログラムの実行状況や発生したエラーなどを、システム全体の標準的なログファイルに記録することが可能となり、システム監視やトラブルシューティングに役立ちます。
この関数は二つの引数を取ります。一つ目の$priorityは、送信するメッセージの重要度や種類を示す整数で、LOG_INFO(情報)、LOG_WARNING(警告)、LOG_ERR(エラー)などの定数を指定します。これにより、ログ分析時にメッセージの緊急度を識別できます。二つ目の$messageは、ログに記録したい実際の文字列です。関数は、ログの送信処理が成功した場合はtrueを、失敗した場合はfalseを返します。
サンプルコードでは、まずopenlog関数でsyslogへの接続を開始し、ログメッセージに付加される識別子を設定しています。その後、syslog関数を呼び出して、情報レベル、警告レベル、エラーレベルの異なる重要度のメッセージを順にシステムログへ送信しています。各送信処理の成否は戻り値で確認されます。最後にcloselog関数でsyslogへの接続を閉じます。この一連の操作により、PHPアプリケーションからの情報を統一された形式でシステムログに記録し、システムの安定運用をサポートします。
syslog関数は、OSのログ機能を利用するため、PHPスクリプトを実行するユーザーに適切な権限が必要となる場合があります。また、ログの出力先はシステムのログ設定(例: /etc/rsyslog.conf)によって異なるため、サンプルコードの/var/log/syslogは一例として理解し、ご自身の環境設定を確認することが重要です。syslog関数を使用する前には必ずopenlogで接続を開き、処理が完了したらcloselogで接続を閉じることで、リソースを適切に管理できます。ログの優先度(LOG_INFOなど)とファシリティ(LOG_USERなど)は、ログの種類や重要度を正しく分類するために、目的に合わせて適切に選択してください。syslogやopenlog関数の戻り値は成否を示すため、常に確認してエラーハンドリングを行うようにしてください。
PHP syslog NG検知と代替ログ出力
1<?php 2 3/** 4 * システムログにメッセージを送信します。 5 * syslog関数が成功したかどうかをチェックし、失敗した(NG)場合は代替のログメカニズムを使用します。 6 * 7 * @param string $message 送信するログメッセージ。 8 * @param int $priority ログの優先度(例: LOG_INFO, LOG_WARNING, LOG_ERRなど)。 9 * @return void 10 */ 11function sendSystemLogWithFailureCheck(string $message, int $priority = LOG_INFO): void 12{ 13 // ログメッセージの識別子、オプション、ファシリティを設定します。 14 // LOG_PID: プロセスIDをログに含めます。 15 // LOG_CONS: システムロガーへの接続に失敗した場合、コンソールにメッセージを書き込みます。 16 // LOG_NDELAY: ロガーにすぐに接続します。 17 $ident = 'MyPHPScript'; 18 $option = LOG_PID | LOG_CONS | LOG_NDELAY; 19 $facility = LOG_USER; // ユーザーレベルのメッセージとして記録します。 20 21 // システムロガーへの接続を開きます。 22 // openlogが失敗することは稀ですが、念のため戻り値をチェックします。 23 if (!openlog($ident, $option, $facility)) { 24 // openlogに失敗した場合、PHPのエラーログに出力します。 25 error_log("[ERROR] Failed to open syslog connection for ident: '{$ident}'. Message: '{$message}'"); 26 echo "エラー: システムログ接続を開けませんでした。メッセージ: '{$message}'\n"; 27 return; 28 } 29 30 echo "システムログを送信中 (優先度: " . getPriorityName($priority) . ", メッセージ: '{$message}') ... "; 31 32 // syslog関数でメッセージを送信します。 33 $success = syslog($priority, $message); 34 35 // syslog関数の戻り値をチェックし、ログ書き込みが「NG」(失敗)だった場合の処理を行います。 36 if (!$success) { 37 // syslogが失敗した場合、その旨をPHPのエラーログに記録し、コンソールにも出力します。 38 error_log("[CRITICAL] Failed to write to syslog! Message: '{$message}', Priority: " . getPriorityName($priority) . " (NG)"); 39 echo "失敗しました (NG)。詳細をPHPエラーログで確認してください。\n"; 40 } else { 41 echo "成功しました。\n"; 42 } 43 44 // システムロガーへの接続を閉じます。 45 closelog(); 46} 47 48/** 49 * ログ優先度定数の名前を文字列で返します。 50 * PHP 8のmatch式を使用しています。 51 * 52 * @param int $priority ログの優先度定数。 53 * @return string 優先度に対応する名前。 54 */ 55function getPriorityName(int $priority): string 56{ 57 return match ($priority) { 58 LOG_EMERG => 'EMERGENCY', 59 LOG_ALERT => 'ALERT', 60 LOG_CRIT => 'CRITICAL', 61 LOG_ERR => 'ERROR', 62 LOG_WARNING => 'WARNING', 63 LOG_NOTICE => 'NOTICE', 64 LOG_INFO => 'INFO', 65 LOG_DEBUG => 'DEBUG', 66 default => 'UNKNOWN', 67 }; 68} 69 70// --- 以下のコードはスクリプトの実行部分です --- 71 72// 1. 正常な情報ログの送信例 73sendSystemLogWithFailureCheck("アプリケーションが正常に起動しました。", LOG_INFO); 74echo "\n"; 75 76// 2. 警告レベルのログ送信例 77sendSystemLogWithFailureCheck("設定ファイル 'config.ini' が見つかりませんでした。デフォルト値を使用します。", LOG_WARNING); 78echo "\n"; 79 80// 3. エラーレベルのログ送信例 81sendSystemLogWithFailureCheck("データベース接続に失敗しました。5秒後に再試行します。", LOG_ERR); 82echo "\n"; 83 84// 補足: syslog関数は通常、成功することがほとんどであるため、 85// 意図的に失敗(NG)する状況をコードで再現するのは困難です。 86// このコードは、もしsyslog関数が内部的に失敗した場合に、その失敗を検知し、 87// 別の方法(error_log)で報告する仕組みを示しています。 88// システムエンジニアを目指す方にとって、このような「もしも」の状況に対応する設計は重要です。 89
PHPのsyslog関数は、アプリケーションからOSのシステムログにメッセージを送信するための機能です。システムログは、サーバーのイベントやエラー情報を一元的に管理する際に利用され、システムエンジニアがシステムの状況を把握するために重要な役割を果たします。
この関数は、第一引数にログの緊急度を示す整数値(例: LOG_INFO、LOG_ERR)を、第二引数に送信したいメッセージの文字列を取ります。処理が成功するとtrueを、失敗するとfalseを真偽値(bool)として返します。
サンプルコードでは、syslog関数を使用する前にopenlog関数でシステムロガーへの接続を開き、スクリプトの識別子やログオプション、ファシリティを設定しています。その後、syslog関数を呼び出して実際にメッセージを送信し、ログの送信が終わった後にcloselog関数で接続を閉じるという一連の流れを示しています。
特に重要な点として、syslog関数の戻り値を確認し、もしログの送信が「NG」(失敗)した場合には、error_log関数を使ってPHPのエラーログにその失敗を記録するという代替処理が実装されています。これにより、たとえsyslogが正常に動作しなかったとしても、問題が埋もれてしまわないように対策を講じています。システムエンジニアを目指す方にとって、このようなエラー発生時の対応を考慮した堅牢な設計は非常に役立ちます。
PHPのsyslog関数は、OSのシステムログにメッセージを記録します。利用する際は、まずopenlogでログ接続を開き、メッセージ送信後にcloselogで閉じる一連の流れが必要です。syslog関数は通常成功しますが、万が一戻り値がfalse(NG)だった場合に備え、error_logなど別の方法でログを記録するフォールバック処理を実装することが重要です。これにより、システムログへの書き込みに問題が発生しても、重要な情報を失うことなく情報を把握できます。ログの優先度引数は、システムの状態に応じた適切なレベルを選択してください。
PHP syslog 出力されない場合のログ記録と確認
1<?php 2 3declare(strict_types=1); 4 5/** 6 * syslog関数を使用してシステムログにメッセージを記録するサンプルコード。 7 * 8 * キーワード「php syslog 出力されない」への対策として、 9 * openlog/closelogとの組み合わせ、および一般的なデバッグのヒントを含みます。 10 * 11 * @param string $baseMessage ログメッセージのベースとなる文字列 12 * @return void 13 */ 14function logToSyslogWithDebugTips(string $baseMessage): void 15{ 16 // openlogを使ってログをオープンします。 17 // - ident: ログに記録されるプログラム名 (例: your-php-app)。ログファイルでこの名前を検索できます。 18 // - option: ログ出力オプション (LOG_PID: プロセスIDも記録, LOG_PERROR: 標準エラー出力にもエラーを出力) 19 // - facility: ログの種類 (LOG_USER: ユーザー定義のメッセージ, LOG_LOCAL0-7: ローカル利用) 20 // 21 // 「出力されない」原因の一つとして、openlogが適切に設定されていない、 22 // または呼び出されていないことが挙げられます。 23 openlog('php-syslog-example', LOG_PID | LOG_PERROR, LOG_USER); 24 25 // 複数の優先度 (ログレベル) でメッセージを記録してみます。 26 // システムによっては、特定の優先度以下のログはフィルタリングされる場合があります。 27 // 「出力されない」と感じた場合、より高い優先度で試すことも有効です。 28 29 // 緊急事態 (システムが使用不能) 30 syslog(LOG_EMERG, $baseMessage . ' - 緊急事態発生!システムがダウンしました。'); 31 32 // 警告 (すぐに修正が必要な状態) 33 syslog(LOG_ALERT, $baseMessage . ' - 警告!即座に対応が必要です。'); 34 35 // 致命的なエラー (ハードウェアエラーなど) 36 syslog(LOG_CRIT, $baseMessage . ' - 致命的なエラーが発生しました。'); 37 38 // エラー (実行時エラー) 39 syslog(LOG_ERR, $baseMessage . ' - エラーが発生しました。'); 40 41 // 警告 (エラーではないが注意すべき状態) 42 syslog(LOG_WARNING, $baseMessage . ' - 警告。注意してください。'); 43 44 // 通知 (正常だが重要なイベント) 45 syslog(LOG_NOTICE, $baseMessage . ' - 重要な通知。'); 46 47 // 情報 (一般的な情報メッセージ) 48 syslog(LOG_INFO, $baseMessage . ' - 一般情報メッセージ。'); 49 50 // デバッグ (開発者向けのデバッグ情報) 51 syslog(LOG_DEBUG, $baseMessage . ' - デバッグ情報。'); 52 53 // closelogでログをクローズします。 54 closelog(); 55 56 echo "syslog関数でメッセージを記録しました。システムログを確認してください。\n"; 57 echo "Linuxの場合、通常 /var/log/syslog や /var/log/messages に出力されます。\n"; 58 echo "また、systemdを使用している場合は journalctl コマンド (例: journalctl -t php-syslog-example) で確認できることもあります。\n\n"; 59 60 echo "--- 「syslog 出力されない」場合の確認ポイント --- \n"; 61 echo "1. rsyslog や syslog-ng などのログデーモンが稼働しているか確認してください。\n"; 62 echo " (例: systemctl status rsyslog)\n"; 63 echo "2. ログデーモンの設定ファイル (例: /etc/rsyslog.conf) で、\n"; 64 echo " `LOG_USER` ファシリティのログがどこに出力されるか、フィルタリングされていないか確認してください。\n"; 65 echo "3. SELinux や AppArmor などのセキュリティモジュールがログの書き込みをブロックしていないか確認してください。\n"; 66 echo "4. PHPが実行されているユーザーが、syslogデーモンと通信できる権限を持っているか確認してください。\n"; 67 echo " (通常は問題ありませんが、特殊な環境ではチェックが必要です。)\n"; 68 echo "5. 異なるログレベル (LOG_EMERG, LOG_ALERT, LOG_ERR, LOG_WARNING, LOG_INFO, LOG_DEBUGなど) で試して、\n"; 69 echo " ログデーモンの設定でフィルタリングされていないか確認してください。\n"; 70 echo " 特に LOG_DEBUG はデフォルトで出力されない設定になっていることが多いです。\n"; 71} 72 73// サンプルコードの実行 74logToSyslogWithDebugTips('PHP Syslog Test Message');
PHPのsyslog関数は、システムに標準で備わっているログ機能(syslogデーモン)を通じて、プログラムからのメッセージを記録するために使用されます。これにより、アプリケーションの動作状況やエラー、重要なイベントなどを一元的に管理されたログファイルに保存できます。
この関数は、int $priorityとstring $messageの二つの引数を取ります。$priorityは、記録するメッセージの重要度や種類を示す整数値です。例えば、LOG_EMERG(緊急事態)からLOG_DEBUG(開発者向けデバッグ情報)まで複数のレベルがあり、システムのログ設定によってどのレベルのメッセージが実際にログファイルに出力されるかが決まります。$messageは、ログとして記録したい具体的なテキスト内容です。関数は、メッセージの記録に成功した場合はtrueを、失敗した場合はfalseを返します。
syslogでメッセージが「出力されない」と感じる場合、いくつか確認すべき点があります。通常、syslog関数を呼び出す前にopenlog関数でログセッションを開始し、プログラム名やログの種類(ファシリティ)を設定することが推奨されます。これにより、ログファイル内でメッセージを特定しやすくなります。処理の終了時にはcloselog関数でセッションを閉じます。また、LOG_DEBUGのような低い優先度のメッセージは、システムログの設定でデフォルトで出力されないようにフィルタリングされていることが多いため、LOG_ERRやLOG_INFOなどの高い優先度で試すことも有効です。ログは、Linuxシステムでは一般的に/var/log/syslogや/var/log/messages、またはjournalctlコマンドなどで確認できます。ログデーモンの稼働状況や設定ファイル、SELinuxなどのセキュリティ設定も、出力に影響を与える可能性があるため、確認が必要です。
PHPのsyslog関数は、OSのシステムログにメッセージを記録します。この関数を利用する際は、通常openlogでログの識別子や種類を設定し、メッセージ出力後にcloselogで閉じるのが安全です。ログが出力されない場合、openlogのidentやfacilityオプションが適切か確認してください。LOG_PERRORオプションはデバッグ時に標準エラー出力にもログを出力し、問題特定に役立ちます。ログ出力はOSのログデーモン(rsyslogなど)に依存するため、デーモンが稼働しているか、その設定ファイルでログレベル(優先度)やファシリティがフィルタリングされていないか確認が不可欠です。LOG_DEBUGなどの低い優先度のログはデフォルトで出力されない場合があるため、LOG_ERRなどの高い優先度で試してください。SELinuxなどのセキュリティ設定やPHP実行ユーザーの権限も影響することがあります。
PHP syslog 出力先を理解する
1<?php 2 3/** 4 * PHPのsyslog関数を使用してシステムログにメッセージを書き込みます。 5 * 6 * この関数は、指定されたメッセージと優先度でOSのsyslogデーモンにログを送信します。 7 * ログの実際の出力先ファイル(例: /var/log/syslog, /var/log/messages, カスタムログファイル)は、 8 * Linux/Unixシステムにおけるrsyslogやsyslog-ngなどのsyslogデーモンの設定ファイル 9 * (通常は /etc/rsyslog.conf や /etc/syslog.conf)によって決定されます。 10 * PHPコード内から直接出力先ファイルを指定することはできません。 11 * 12 * @param string $message ログに出力するメッセージ。 13 * @param int $priority ログの優先度とファシリティ。PHPのLOG_*定数を組み合わせて使用します。 14 * 例: LOG_INFO | LOG_USER 15 * @return bool メッセージの書き込みが成功した場合は true、失敗した場合は false。 16 */ 17function sendToSystemLog(string $message, int $priority): bool 18{ 19 // syslog関数はメッセージをシステムのsyslogデーモンに送信します。 20 // 成功した場合は true、失敗した場合は false を返します。 21 $success = syslog($priority, $message); 22 23 if ($success) { 24 echo "システムログにメッセージを送信しました: \"{$message}\" (優先度: {$priority})\n"; 25 echo "システムのログ設定に従い、対応するログファイルに記録されます。\n"; 26 } else { 27 echo "システムログへのメッセージ送信に失敗しました: \"{$message}\" (優先度: {$priority})\n"; 28 echo "syslogデーモンが稼働しているか、または適切な権限があるかを確認してください。\n"; 29 } 30 31 return $success; 32} 33 34// --- サンプルコードの実行例 --- 35 36// 1. 情報レベルのメッセージをユーザーファシリティでログに記録する例 37// LOG_INFO (情報レベル) と LOG_USER (ユーザーレベルのアプリケーション) を組み合わせます。 38$infoMessage = "PHPアプリケーションの初期化が正常に完了しました。"; 39sendToSystemLog($infoMessage, LOG_INFO | LOG_USER); 40 41echo "\n"; // 出力の区切り 42 43// 2. 警告レベルのメッセージをローカルファシリティでログに記録する例 44// LOG_WARNING (警告レベル) と LOG_LOCAL0 (カスタムアプリケーション用のローカルファシリティ) を組み合わせます。 45// LOG_LOCAL0 から LOG_LOCAL7 は、独自のアプリケーションのログに使用されることが多いです。 46$warningMessage = "設定ファイルが見つかりません。デフォルト設定を適用します。"; 47sendToSystemLog($warningMessage, LOG_WARNING | LOG_LOCAL0); 48 49?>
PHPのsyslog関数は、PHPアプリケーションからシステムのログ機能(syslogデーモン)にメッセージを送信するために利用されます。この関数を使用することで、アプリケーションの動作状況やエラーなどの情報を、オペレーティングシステムが管理するログとして一元的に記録できます。
第一引数$priorityには、ログの重要度(優先度)と種類(ファシリティ)を整数値で指定します。PHPが提供するLOG_INFO(情報)、LOG_WARNING(警告)などの優先度定数と、LOG_USER(ユーザーレベルのアプリケーション)、LOG_LOCAL0(カスタムアプリケーション)などのファシリティ定数を組み合わせることで、ログメッセージのカテゴリを明確に示します。第二引数$messageには、ログに出力したい具体的な文字列メッセージを指定します。
この関数は、メッセージがシステムのsyslogデーモンに正常に送信された場合はtrueを、送信に失敗した場合はfalseを戻り値として返します。ログ送信の失敗は、syslogデーモンが稼働していない場合や、PHP実行環境の権限不足などが原因で発生することがあります。
syslog関数自体はログの具体的な出力ファイル(例: /var/log/syslog)を直接指定するものではありません。ログの実際の出力先は、Linux/Unixシステム上で動作するrsyslogやsyslog-ngといったsyslogデーモンの設定ファイル(通常/etc/rsyslog.confなど)によって決定されます。これにより、システム管理者はログの一元管理やフィルタリング設定を柔軟に行うことが可能です。
PHPのsyslog関数は、指定されたメッセージをOSのsyslogデーモンへ送信し、システムログに記録します。PHPコードから直接ログの出力先ファイルを指定することはできません。実際の出力先(例: /var/log/syslog)は、rsyslogやsyslog-ngなどのOSのsyslogデーモン設定(通常は/etc/rsyslog.confなど)によって決定されます。引数の$priorityには、LOG_INFOなどのログレベルとLOG_USERなどのファシリティをビットOR演算子「|」で組み合わせて指定します。関数はメッセージの送信に成功するとtrue、失敗するとfalseを返しますので、必ず戻り値を確認し、適切にエラー処理を行ってください。送信に失敗した場合は、syslogデーモンが稼働しているか、またはPHPの実行ユーザーにログ書き込みの適切な権限があるかを確認する必要があります。