IMG-LOGO
공지사항 :

PHP 로그(log)

lmkfox - 2025-08-14 06:26:54 35 Views 0 Comment

1. PHP에서 로그의 기본 개념

  • 로그(Log): 실행 중인 프로그램의 상태나 이벤트를 기록한 정보.

  • PHP에서는 주로 에러 로그사용자 정의 로그를 남길 수 있습니다.

  • 로그 출력 위치는 PHP 설정(php.ini)에서 지정하거나, 코드에서 직접 지정할 수 있습니다.


2. PHP 에러 로그 설정

에러 로그는 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 등)를 재시작해야 적용됩니다.


3. 런타임에서 로그 설정 변경

php.ini를 수정할 수 없는 경우 코드에서 변경할 수도 있습니다.

ini_set('log_errors', 1);
ini_set('error_log', '/var/log/php_errors.log');
error_reporting(E_ALL);


4. 에러 로그 예시

<?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


5. 사용자 정의 로그 작성

PHP에서 직접 로그를 남기고 싶다면 error_log() 함수를 사용합니다.

<?php
// 기본 에러 로그 파일에 기록
error_log("이것은 기본 로그 파일에 남기는 테스트 메시지");

// 별도의 파일에 기록
error_log("이것은 별도 파일에 기록", 3, "/var/log/custom.log");
?>

  • 첫 번째 인자: 로그 메시지

  • 두 번째 인자: 메시지 타입

    • 0: PHP 시스템 로그에 기록 (기본값)

    • 3: 지정한 파일에 추가 기록

  • 세 번째 인자: 파일 경로(타입이 3일 때 필요)


6. 웹 서버 로그와 PHP 로그

  • Apache/Nginx 에러 로그: PHP 에러가 웹 서버 에러 로그에 함께 기록될 수 있음.

  • 예: Apache에서 error_log 디렉티브를 사용하여 /var/log/apache2/error.log에 PHP 오류가 함께 저장.


7. 실전 팁

  1. 운영 환경에서는 에러를 화면에 출력하지 말고 반드시 로그로만 남길 것.

display_errors = Off
log_errors = On

  1. 로그 파일 권한은 웹 서버 계정이 쓸 수 있게 설정 (chown, chmod 활용).

  2. 로그 파일이 너무 커지면 로테이션(logrotate) 설정 필요.

  3. 중요한 사용자 활동, API 요청, 보안 이벤트 등은 커스텀 로그로 별도 파일에 관리.


8. 간단한 커스텀 로거 예시

<?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 연결 실패");
?>


댓글