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 로그를 함께 봐야 정확한 원인 판별이 가능함