Had baris log yang ditulis kepada Apache Errorlog daripada mod php error_log
P粉814160988
P粉814160988 2024-02-03 17:43:09
0
1
384

Saya mempunyai persediaan apache 2.4 + mod_php yang mudah sebagai pelayan web. Arahan error_log dalam php.ini tidak ditetapkan, jadi ia mengambil nilai lalai 0. Tingkah laku diterangkan di sini (https://www.php.net/manual/en/function.error-log.php) dan untuk meringkaskan hasil akhir, saya melihat bahawa ia dimajukan kepada pengendali Log modul SAPI (mod_php) . Log dimajukan ke Apache untuk diproses, yang seterusnya mencatatkannya ke fail berdasarkan arahan ErrorLog yang saya tetapkan.

Masalahnya sekarang ialah apabila penyataan log di sebelah php panjang melebihi 8192 bait, ia dipenggal kepada rentetan tepat 8192 bait seperti yang ditunjukkan dalam log ralat Apache. Had 8192 bait agak mengelirukan, jadi apabila melampirkan strace pada benang pekerja dan melihat panggilan sistem, saya mendapati ia hanya melakukan satu panggilan tulis dengan 8192 bait sebagai panjang untuk menulis. Saya tahu php mempunyai kawalan/arahan had log tetapi ia tidak mempunyai sebarang kesan pada pernyataan error_log, saya juga mengesahkan ini. Hanya untuk menambah, had panjang log php semasa saya ialah 1024 (lalai) tetapi ia masih mencatatkan 8192 bait dalam log ralat apache.

Membandingkan tingkah laku ini dengan menghantar error_log ke fail dengan parameter message_type 3, saya dapat melihat bahawa rentetan lengkap ditulis dalam ketulan 8192 bait. Log strace dilampirkan untuk ini:

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

Jika message_type ialah 0, satu-satunya perbezaan ialah hanya terdapat satu panggilan tulis.

Bolehkah seseorang memberikan sedikit penjelasan tentang perkara ini dan cara mengatasi had 8192 bait ini?

P粉814160988
P粉814160988

membalas semua(1)
P粉567281015

Seperti yang telah disebutkan, semak dua kali

log_errors_max_len should be 0.

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

Seperti yang dinyatakan dalam manual, ini semua berlaku dalam bait, jadi kami perlu menyemak fail lain. https://www.php.net/manual/ en/faq.using.php#faq.using.shorthandbytes

nginx/php-fpm juga perlu dilaraskan:

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

Dalam /etc/php-fpm.conf anda boleh menukar nilai log_limit = NumberInBytes dan kemudian mulakan semula php-fpm

Untuk mengelakkan atau menyemak ralat lain, anda juga boleh Nyahset arahan error_log dalam php.ini untuk log masuk ke ralat standard nginx kemudian akan log masuk ke log ralatnya sendiri.

Tetapan juga berguna php-fpm configure catch_workers_output = ya dalam php-fpm.conf Dengan cara ini ralat standard tidak dibuang.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!