mod php error_log から Apache Errorlog に書き込むためのログ行の制限
P粉814160988
P粉814160988 2024-02-03 17:43:09
0
1
409

単純な Apache 2.4 mod_php を Web サーバーとしてセットアップしました。 php.ini の error_log ディレクティブは設定されていないため、デフォルト値の 0 が使用されます。動作はここ (https://www.php.net/manual/en/function.error-log.php) で説明されており、最終結果を要約すると、SAPI (mod_php) モジュールのログ ハンドラーに転送されていることがわかります。 。ログは処理のために Apache に転送され、次に、設定した ErrorLog ディレクティブに基づいてファイルにログが記録されます。

問題は、Apache エラー ログに示されているように、php 側のログ ステートメントが 8192 バイトを超える場合、正確に 8192 バイトの文字列に切り詰められることです。 8192 バイトの制限は少しわかりにくいため、strace をワーカー スレッドにアタッチしてシステム コールを確認すると、書き込み長が 8192 バイトの書き込み呼び出しが 1 回だけ行われることがわかりました。 PHPにはログ制限コントロール/ディレクティブがあることは知っていますが、それらはerror_logステートメントに影響を与えません。これも確認しました。付け加えておきますが、現在の php ログの長さ制限は 1024 (デフォルト) ですが、それでも Apache エラー ログには 8192 バイトが記録されます。

この動作を、パラメーター message_type が 3 であるファイルに error_log を送信する場合と比較すると、完全な文字列が 8192 バイトのチャンクに書き込まれていることがわかります。 これに関する strace ログを添付します:

リーリー

message_type が 0 の場合、唯一の違いは書き込み呼び出しが 1 つだけであることです。

誰かがこれについての説明と、この 8192 バイト制限を回避する方法を提供してもらえますか?

P粉814160988
P粉814160988

全員に返信(1)
P粉567281015

すでに述べたように、二度確認してください

リーリー

https://www .php.net/manual/en/errorfunc.configuration.php#ini.log-errors-max-len

マニュアルで述べたように、これはすべてバイト単位で行われるため、他のファイルを確認する必要があります。 https://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes

nginx/php-fpm も調整する必要があります:

https://forums.freebsd.org/threads/howto-stop-nginx-php-fpm-from-truncating-your-stack-trace-error-message.56543/

/etc/php-fpm.conf で、log_limit = NumberInBytes の値を変更して、php-fpm を再起動できます。

他のエラーを回避または確認するには、次のこともできます。 php.ini の error_log ディレクティブの設定を解除します。 nginxの標準エラーに記録するには その後、自分のエラー ログにログインします。

設定も便利です php-fpm php-fpm.conf で catch_workers_output = yes を設定します こうすることで、標準エラーは破棄されません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート