콘텐츠로 이동

Laravel 운영 로그 설정 기준

운영 서버에서 Laravel 로그를 추적 가능하고 장기 보관 가능한 구조로 관리하기 위한 기준을 정의함.

단순 tail 명령 모음이 아니라, 장애 분석/감사 대응을 위한 로그 운영 원칙에 집중함.


1. 기본 원칙

  • 로그는 장애 분석의 1차 근거
  • 애플리케이션 로그와 시스템 로그를 분리
  • 로그 로테이션 정책을 명시
  • 로그 파일 권한과 SELinux 컨텍스트를 함께 관리

2. 로그 계층 분리 기준

계층 경로 용도
Laravel 앱 로그 /var/www/[ProjectName]/current/storage/logs/ 비즈니스 예외/도메인 오류
Nginx 로그 /var/log/nginx/ 요청/응답, upstream 오류
PHP-FPM 로그 /var/log/php-fpm/ 런타임/워커 오류
Queue worker 로그 /var/log/supervisor/ 또는 journalctl 작업 처리 실패/재시작

3. Laravel 로그 채널 기준

운영 .env 권장값:

LOG_CHANNEL=daily
LOG_LEVEL=info

운영 기준:

  • daily 채널 사용으로 파일 분할
  • debug는 장애 분석 기간에만 제한적으로 사용
  • stack 사용 시 출력 대상 중복 여부 점검

4. 로그 보관/로테이션 기준

  • Laravel: daily 채널의 보관일(days) 정책화
  • Nginx/PHP-FPM/Supervisor: OS logrotate 정책으로 관리
  • 보존 기간은 서비스 요구사항(감사/보안)과 일치시킴

로그 파일이 크다고 즉시 삭제하지 않고, 보관 정책(기간/압축/순환)을 먼저 조정함.


5. 고정 로그 파일 경로가 필요한 경우

Laravel daily 로그는 날짜별 파일로 분리됨. 외부 tail 도구나 제한적인 Log Viewer 연동 때문에 항상 같은 파일명을 바라봐야 하는 경우에는 고정 심링크를 별도로 관리할 수 있음.

예시 구조:

storage/logs/[PlatformName]-YYYY-MM-DD.log
storage/logs/[PlatformName].log -> [PlatformName]-YYYY-MM-DD.log

운영 기준:

  • 기본은 Laravel daily 채널을 우선함
  • 고정 심링크는 필요한 경우에만 사용함
  • 로그 파일 소유자, 권한, SELinux 컨텍스트를 함께 확인함
  • cron으로 심링크를 갱신하는 경우 실행 결과와 실패 로그를 남김

6. 권한 및 SELinux 기준

  • 로그 경로는 실행 계정이 쓰기 가능해야 함
  • 전체 777 권한 금지
  • writable 경로 SELinux 컨텍스트 유지 (restorecon 포함)

기본 점검:

ls -ld /var/www/[ProjectName]/current/storage/logs
ls -lZ /var/www/[ProjectName]/current/storage

7. 운영 확인 명령

tail -n 200 /var/www/[ProjectName]/current/storage/logs/laravel.log
sudo tail -n 200 /var/log/nginx/error.log
sudo tail -n 200 /var/log/php-fpm/www-error.log
sudo tail -n 200 /var/log/supervisor/laravel-worker.log

systemd 로그 확인:

sudo journalctl -u php-fpm -n 100 --no-pager
sudo journalctl -u supervisord -n 100 --no-pager

8. 운영 금지 패턴

  • 콘솔 출력만 로그로 간주
  • 장애 중 truncate/삭제로 증거 제거
  • 동일 오류를 다른 계층 로그와 교차 확인하지 않음
  • 로그 확인용 웹 화면을 인증 없이 공개

9. 정리

  • 로그 운영의 핵심은 "남겼다"가 아니라 "원인 추적이 가능하다"임
  • Laravel 단독 로그가 아니라 Nginx/PHP-FPM/Worker 로그를 함께 봐야 정확한 원인 판별이 가능함