PHPのcloseLog()はiDempotentであり、複数回呼び出された場合にエラーはありませんが、これにより、プログラム内のリソースの繰り返しのクリーンアップの問題が隠される可能性があります。たとえば、関数は繰り返し呼ばれますが、 closeLog()は毎回実行されます。これは、リソース管理ロジックが明確でないことを意味する場合があります。
トラブルシューティング方法:
closelog()を複数の場所で直接呼び出すことを避けるために、ログ関連の呼び出しをカプセル化します。
ログラッパークラスまたはスキーマ(シングルトンなど)を使用して、ログ接続のライフサイクルを中心に制御します。
ログシステムには、syslog()の後にバッファがある場合があります。 closelog()がすぐに閉じられている場合() 、特に高い並行性または特別な環境では、ログが時間内に記述されない可能性があります。
トラブルシューティング方法:
Syslog()を呼び出した後の遅延を導入します(テストと検証にのみ使用されますが、生産には推奨されません)。
各ログの直後に閉じるのではなく、スクリプトの最後または破壊段階でcloselog()を呼び出してください。
<span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">"example"</span></span><span>, LOG_PID | LOG_PERROR, LOG_LOCAL0);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_INFO, </span><span><span class="hljs-string">"テストログ"</span></span><span>);
</span><span><span class="hljs-comment">// すぐにしないでください closelog(),スクリプトの最後に均一に呼ばれるべきです</span></span><span>
</span></span>
Closelog()が正しく呼ばれている場合でも、ログが書き込まれない場合があります。考えられる理由は、 OpenLog()が無効なログタイプ(施設)を使用するか、システムがそのタイプのログ権限を有効にしないことです。
トラブルシューティング方法:
OpenLog()で使用されている施設がシステムによってサポートされているかどうかを確認します。
システムのSyslog構成ファイル( /etc/rsyslog.confまたは/etc/syslog.confなど)で対応する機能が有効かどうかを確認します。
ログファイルの権限を確認するか、 Loggerコマンドを使用して手動でテストします。