로그(Log): 실행 중인 프로그램의 상태나 이벤트를 기록한 정보.
PHP에서는 주로 에러 로그와 사용자 정의 로그를 남길 수 있습니다.
로그 출력 위치는 PHP 설정(php.ini)에서 지정하거나, 코드에서 직접 지정할 수 있습니다.
에러 로그는 PHP의 php.ini 파일에서 설정합니다.
; 에러 로그 활성화
log_errors = On
; 에러 로그 파일 경로 지정 (절대 경로 권장)
error_log = /var/log/php_errors.log
; 표시할 에러 수준 (모든 에러 기록)
error_reporting = E_ALL
log_errors: 로그 기록 여부 (On이면 기록)
error_log: 로그 파일 경로
error_reporting: 기록할 에러 수준
E_ALL: 모든 에러
E_ERROR | E_WARNING: 심각한 오류와 경고만 기록
php.ini를 수정한 후에는 웹 서버(Apache, Nginx 등)를 재시작해야 적용됩니다.
php.ini를 수정할 수 없는 경우 코드에서 변경할 수도 있습니다.
ini_set('log_errors', 1);
ini_set('error_log', '/var/log/php_errors.log');
error_reporting(E_ALL);
<?php
// 존재하지 않는 파일 읽기 (경고 발생)
$file = file_get_contents('not_exist.txt');
?>
로그 파일(/var/log/php_errors.log)에 다음과 같이 기록될 수 있음:
[14-Aug-2025 10:15:32 UTC] PHP Warning: file_get_contents(not_exist.txt): Failed to open stream: No such file or directory in /var/www/html/test.php on line 3
PHP에서 직접 로그를 남기고 싶다면 error_log() 함수를 사용합니다.
<?php
// 기본 에러 로그 파일에 기록
error_log("이것은 기본 로그 파일에 남기는 테스트 메시지");
// 별도의 파일에 기록
error_log("이것은 별도 파일에 기록", 3, "/var/log/custom.log");
?>
첫 번째 인자: 로그 메시지
두 번째 인자: 메시지 타입
0: PHP 시스템 로그에 기록 (기본값)
3: 지정한 파일에 추가 기록
세 번째 인자: 파일 경로(타입이 3일 때 필요)
Apache/Nginx 에러 로그: PHP 에러가 웹 서버 에러 로그에 함께 기록될 수 있음.
예: Apache에서 error_log 디렉티브를 사용하여 /var/log/apache2/error.log에 PHP 오류가 함께 저장.
운영 환경에서는 에러를 화면에 출력하지 말고 반드시 로그로만 남길 것.
display_errors = Off
log_errors = On
로그 파일 권한은 웹 서버 계정이 쓸 수 있게 설정 (chown, chmod 활용).
로그 파일이 너무 커지면 로테이션(logrotate) 설정 필요.
중요한 사용자 활동, API 요청, 보안 이벤트 등은 커스텀 로그로 별도 파일에 관리.
<?php
function write_log($message, $file = '/var/log/custom_app.log') {
$date = date('Y-m-d H:i:s');
$formatted = "[{$date}] {$message}\n";
file_put_contents($file, $formatted, FILE_APPEND);
}
// 사용 예시
write_log("사용자가 로그인 시도");
write_log("DB 연결 실패");
?>