PHP 오류 로그 확인 방법, 위치 설정과 노출 방지

핵심 요약
  • error_log를 지정하지 않으면 오류는 웹 서버나 PHP-FPM 같은 실행 환경의 기본 로그로 가므로, 먼저 현재 설정값을 확인합니다.
  • 운영 서버는 display_errors를 끄고 log_errors를 켜서 오류를 화면 대신 파일에 남깁니다.
  • 로그 파일은 웹에서 열리지 않는 위치에 두고 권한을 제한하며, 주기적으로 새 오류를 확인합니다.

사이트가 갑자기 흰 화면이 되거나 500 오류가 나면 원인은 대부분 PHP 오류 로그에 남아 있습니다. 문제는 로그가 어디에 있는지 모르는 경우가 많고, 반대로 오류를 방문자 화면에 그대로 보여 주는 설정을 방치하는 경우도 많다는 점입니다.

이 글은 로그 위치를 찾는 방법, 운영 서버에 맞는 설정, 자주 보는 오류와 로그 파일 관리를 정리합니다. 설정 전체는 PHP 서버 보안 설정 글과 이어서 보면 좋습니다.

오류 로그 위치 찾기

PHP 매뉴얼에 따르면 error_log 지시어는 오류를 받을 파일을 지정하고 기본값은 비어 있습니다. 비어 있으면 오류는 실행 환경의 로그로 갑니다. 아파치 모듈로 돌면 아파치 오류 로그, 명령줄(CLI)에서는 stderr입니다. 특수값 syslog를 쓰면 시스템 로그로 보냅니다. 현재 값은 다음으로 확인합니다.

php -i | grep -E "^(error_log|log_errors|display_errors)"

이 명령은 명령줄 PHP의 설정입니다. 웹이 쓰는 설정은 phpinfo 화면에서 Local Value를 확인하세요. 웹 서버나 PHP-FPM의 로그 경로는 배포판과 호스팅마다 다르므로, 호스팅이라면 패널의 로그 메뉴나 업체 안내를 찾는 것이 정확합니다.

운영 서버에 맞는 로그 설정

매뉴얼의 기본값은 display_errors가 켜짐(1), log_errors가 꺼짐(0)입니다. 개발에는 편하지만 운영에서는 반대로 해야 합니다. 매뉴얼은 운영 사이트에서는 오류를 보여 주는 대신 로그에 남기라고 강하게 권합니다.

display_errors = Off
log_errors = On
error_log = /var/log/php/php_errors.log
error_reporting = E_ALL

error_reporting의 기본값은 PHP 8.0.0부터 E_ALL입니다. 8.0 이전에는 알림과 권장 중단 항목을 제외한 값이 기본이었습니다. 지정한 폴더는 PHP를 실행하는 계정이 쓸 수 있어야 하고, 경로가 웹에서 열리는 폴더 안이면 안 됩니다.

내 사이트의 HTTPS·인증서·보안 헤더를 바로 확인할 수 있습니다.

무료 보안 검사 시작

로그 읽는 법

tail -n 50 /var/log/php/php_errors.log      # 최근 50줄
tail -f /var/log/php/php_errors.log         # 실시간 감시
grep "Fatal error" /var/log/php/php_errors.log | tail

한 줄에는 보통 시각, 오류 종류, 메시지, 파일 경로, 줄 번호가 들어 있습니다. 파일 경로를 보면 원인이 플러그인인지 테마인지 직접 만든 코드인지 바로 알 수 있습니다.

같은 오류가 반복되면 처음 나타난 시각을 찾아 그 무렵 한 작업과 연결해 보세요. 플러그인 업데이트, PHP 버전 변경, 파일 수정 직후에 시작됐다면 원인을 좁히기 쉽습니다. 반대로 내가 작업하지 않은 시간에 낯선 파일 경로가 오류에 나타나면 의심 파일일 수 있으니 PHP 웹쉘 탐지 글의 점검을 이어 하세요.

자주 보는 오류 종류

종류의미대응
Parse error문법 오류, 대개 코드를 잘못 편집한 직후해당 줄 수정 또는 이전 파일로 복구
Fatal error실행 중단, 없는 함수 호출이나 호환 안 되는 코드파일 경로로 원인 플러그인·테마 확인
Warning계속 실행되지만 문제 있음값이 비었는지 등 조건 점검
Notice·Deprecated알림, 앞으로 사라질 기능 사용업데이트 전에 정리
Allowed memory size 초과메모리 한도 부족원인 코드 점검 후 한도 조정

PHP 버전을 올린 직후 Deprecated나 Fatal error가 갑자기 늘면 새 버전과 맞지 않는 코드가 있다는 뜻입니다. 순서는 PHP 업데이트 방법 글을 참고하세요.

워드프레스 debug.log

워드프레스에서는 WP_DEBUG와 WP_DEBUG_LOG를 켜면 wp-content 폴더의 debug.log에 오류가 쌓입니다. 워드프레스 문서는 WP_DEBUG가 기본 꺼짐이고 운영 사이트에서는 쓰지 말라고 권고하며, WP_DEBUG_DISPLAY를 false로 하면 화면 출력을 막을 수 있다고 안내합니다. 문서는 debug.log의 접근 차단 여부를 따로 설명하지 않으므로 서버 설정에서 직접 막아야 합니다.

로그를 안전하게 관리하기

  • 운영 사이트에서 일부러 오류를 내 보지 말고, php -i나 phpinfo의 설정값으로 display_errors가 꺼졌는지 확인합니다.
  • 로그 파일은 웹 루트 밖에 두거나, 웹에서 접근 못 하게 합니다. 경로와 데이터베이스 정보가 들어 있을 수 있습니다.
  • 파일이 무한정 커지지 않게 서버의 로그 순환 설정을 사용합니다.
  • 접근 로그와 함께 보면 침입 시도를 알아내는 데 도움이 됩니다. 서버 접근 로그 확인 글을 참고하세요.

외부 주소 검사로는 로그 설정이 올바른지 확인할 수 없고, 오류 화면이 노출되는지 정도만 짐작할 수 있습니다.

웹사이트 기본 보안 검사HTTPS·리디렉션·인증서·보안 헤더·서버 정보 노출 10개 항목을 무료로 확인할 수 있습니다.

무료 보안 검사 시작

자주 묻는 질문

error_log 설정이 비어 있으면 로그가 안 남나요?

매뉴얼 기준으로 error_log의 기본값은 비어 있고, 이때는 실행 환경의 기본 로그로 보냅니다. 아파치 모듈 방식이면 웹 서버 오류 로그, 명령줄에서는 stderr가 됩니다. 단 log_errors가 꺼져 있으면 기록되지 않을 수 있습니다.

흰 화면이 뜰 때 가장 먼저 볼 곳은요?

오류 로그입니다. display_errors가 꺼진 운영 서버에서는 치명적 오류가 화면에 나오지 않고 로그에만 남기 때문에 흰 화면이 됩니다.

워드프레스 debug.log를 켜 두어도 되나요?

워드프레스 문서는 운영 사이트에서 WP_DEBUG를 쓰지 말라고 권고합니다. 문제 조사 때만 잠시 켜고, 끝나면 끄고 로그 파일을 지우거나 접근을 막으세요.

ini_set으로 설정했는데 문법 오류는 안 잡혀요.

스크립트 안에서 바꾸는 설정은 파싱 오류나 시작 전 치명적 오류에는 적용되지 못합니다. 이런 경우는 php.ini에서 설정해야 합니다.

확인한 자료

기술 정보는 2026-10-24에 위 자료로 확인했습니다. 소프트웨어 버전·기본값·서비스 정책은 바뀔 수 있으므로 적용 전 각 문서의 최신 내용을 확인하세요. 이 글은 일반 정보이며 특정 서비스 가입을 권하지 않습니다.