찾다

 >  Q&A  >  본문

mod php error_log에서 Apache 오류 로그에 쓰기 위한 로그 줄 제한

웹 서버로 간단한 apache 2.4 + mod_php 설정이 있습니다. php.ini의 error_log 지시문은 설정되지 않았으므로 기본값인 0을 사용합니다. 동작은 여기(https://www.php.net/manual/en/function.error-log.php)에 설명되어 있으며 최종 결과를 요약하면 SAPI(mod_php) 모듈 로그 핸들러로 전달되는 것을 볼 수 있습니다. . 로그는 처리를 위해 Apache로 전달되며, Apache는 내가 설정한 ErrorLog 지시문을 기반으로 파일에 로그를 기록합니다.

이제 문제는 PHP 측의 로그 문 길이가 8192바이트를 초과하면 Apache 오류 로그에 표시된 대로 정확히 8192바이트의 문자열로 잘린다는 것입니다. 8192바이트 제한은 약간 혼란스럽기 때문에 작업자 스레드에 strace를 연결하고 시스템 호출을 살펴보면 쓰기 길이가 8192바이트인 단일 쓰기 호출만 수행하는 것으로 나타났습니다. 나는 PHP에 로그 제한 제어/지시문이 있다는 것을 알고 있지만 error_log 문에는 아무런 영향을 미치지 않습니다. 이것도 확인했습니다. 추가하자면 현재 PHP 로그 길이 제한은 1024(기본값)이지만 여전히 Apache 오류 로그에 8192바이트를 기록합니다.

이 동작을 message_type 매개변수가 3인 파일에 error_log를 보내는 것과 비교하면 전체 문자열이 8192바이트 단위로 기록된다는 것을 알 수 있습니다. 이에 대한 strace 로그가 첨부되어 있습니다:

으아악

message_type이 0인 경우 유일한 차이점은 쓰기 호출이 하나만 있다는 것입니다.

누군가 이에 대한 설명과 이 8192바이트 제한을 해결하는 방법을 제공할 수 있습니까?

P粉814160988P粉814160988300일 전427

모든 응답(1)나는 대답할 것이다

  • P粉567281015

    P粉5672810152024-02-04 10:50:33

    이미 언급했듯이 두 번 확인하세요

    으아악

    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
  • 취소회신하다