国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Protokollzeilenlimit, das von Mod PHP error_log in Apache Errorlog geschrieben wird
P粉814160988
P粉814160988 2024-02-03 17:43:09
0
1
559

Ich habe ein einfaches Apache 2.4 + mod_php-Setup als Webserver. Die error_log-Direktive in php.ini ist nicht gesetzt, daher nimmt sie den Standardwert 0 an. Das Verhalten wird hier beschrieben (https://www.php.net/manual/en/function.error-log.php) und um das Endergebnis zusammenzufassen, sehe ich, dass es an den Log-Handler des SAPI-Moduls (mod_php) weitergeleitet wird . Die Protokolle werden zur Verarbeitung an Apache weitergeleitet, der sie wiederum basierend auf der von mir festgelegten ErrorLog-Anweisung in einer Datei protokolliert.

Das Problem besteht nun darin, dass, wenn die Protokollanweisungen auf der PHP-Seite eine L?nge von 8192 Bytes überschreiten, sie auf eine Zeichenfolge von genau 8192 Bytes gekürzt werden, wie im Apache-Fehlerprotokoll angezeigt. Das Limit von 8192 Bytes ist etwas verwirrend. Als ich Strace an den Worker-Thread anfügte und mir die Systemaufrufe ansah, stellte ich fest, dass nur ein einziger Schreibaufruf mit 8192 Bytes als Schreibl?nge durchgeführt wird. Ich wei?, dass PHP Protokollbegrenzungskontrollen/-anweisungen hat, aber diese haben keine Auswirkung auf die error_log-Anweisung. Ich habe dies auch überprüft. Nur um hinzuzufügen, mein aktuelles PHP-Protokolll?ngenlimit betr?gt 1024 (Standard), aber es werden immer noch 8192 Bytes im Apache-Fehlerprotokoll protokolliert.

Wenn ich dieses Verhalten mit dem Senden des Fehlerprotokolls an eine Datei mit dem Parameter ?message_type“ von 3 vergleiche, kann ich erkennen, dass die gesamte Zeichenfolge in Bl?cken von 8192 Bytes geschrieben wird. Angeh?ngtes Strace-Protokoll hierfür:

fstat(64, {st_mode=S_IFREG|0777, st_size=25009583, ...}) = 0
lseek(64, 0, SEEK_CUR)                  = 0
lseek(64, 0, SEEK_CUR)                  = 0
write(64, "<text to be logged>"..., 8192) = 8192
write(64, "<continued text ...>"..., 8192) = 8192
write(64, "<continued text ...>"..., 8192) = 8192

Wenn message_type 0 ist, besteht der einzige Unterschied darin, dass es nur einen Schreibaufruf gibt.

Kann jemand eine Erkl?rung dazu geben und wie man diese 8192-Byte-Grenze umgehen kann?

P粉814160988
P粉814160988

Antworte allen(1)
P粉567281015

正如已經(jīng)提到的,請檢查兩次

log_errors_max_len should be 0.

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

正如手冊中提到的,這一切都是以字節(jié)為單位發(fā)生的,所以我們必須檢查其他文件。 https://www.php.net/manual/ en/faq.using.php#faq.using.shorthandbytes

nginx/php-fpm也需要調(diào)整:

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 這樣標準錯誤就不會被丟棄。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage