Skip to main content

로깅이란

Laravel의 로깅은 채널이라는 개념을 축으로 설계되어 있습니다. 채널이란 로그의 쓰기 대상과 방법을 정의한 설정 단위로, 파일, Slack, syslog 등 다양한 출력 대상을 조합할 수 있습니다. 내부적으로 Monolog 라이브러리를 사용하고 있어 풍부한 핸들러와 포매터를 활용할 수 있습니다.
기본적으로 stack 채널이 사용됩니다. stack은 여러 채널을 통합해서 다루는 부모 채널입니다.

설정

로깅 설정은 config/logging.php에 집중되어 있습니다. 환경 변수 LOG_CHANNEL로 기본 채널을 전환합니다.

이용 가능한 채널 드라이버

로그 레벨

Laravel은 RFC 5424에 정의된 8단계 로그 레벨을 지원합니다. 심각도가 높은 순으로 나열되어 있습니다. 채널의 level 설정은 최저 로그 레벨을 의미합니다. 예를 들어 levelerror라면 error 이상(critical, alert, emergency)만 기록됩니다.

기본 사용법

Log 파사드

Illuminate\Support\Facades\Log 파사드를 사용해 각 레벨의 메시지를 기록합니다.
컨트롤러에서의 사용 예시입니다.

log() 헬퍼 함수

log() 헬퍼를 사용하면 Log 파사드를 import하지 않고 작성할 수 있습니다.

컨텍스트 정보 추가

메시지와 함께 컨텍스트(배열)를 전달하면 관련 정보를 함께 기록할 수 있습니다.

withContext() — 채널 전체에 공통 컨텍스트 부여

특정 채널에 대해 이후 모든 로그 엔트리에 공통 정보를 부여하고 싶은 경우에는 withContext()를 사용합니다. 요청 ID처럼 모든 로그에 포함하고 싶은 정보에 적합합니다.

shareContext() — 모든 채널에 공통 컨텍스트 부여

withContext()는 대상 채널에만 효과가 한정되지만, shareContext()는 모든 채널에 공통 컨텍스트를 부여합니다.

채널 설정

stack 채널 — 여러 채널에 동시 기록

stack 채널을 사용하면 한 번의 로그 호출로 여러 채널에 기록할 수 있습니다.
이 설정에서는 debug 이상의 모든 로그가 daily(파일)에 기록되고, critical 이상만 slack에도 전송됩니다.
프로덕션 환경에서는 slack 채널의 레벨을 errorcritical로 설정하는 것을 권장합니다. 경미한 로그까지 Slack으로 보내면 알림이 대량이 되어 중요한 알람이 파묻힙니다.

daily 채널 — 로그 로테이션

daily 채널은 날짜별로 파일을 나누고 오래된 파일을 자동 삭제합니다.
days를 작게 하면 오래된 로그가 빨리 삭제됩니다. 프로덕션 환경의 장애 조사에 대비해 충분한 보존 기간을 확보해 주세요.

Slack으로의 오류 알림

Slack의 Incoming Webhook URL을 획득하고, .env에 설정합니다.
stack 채널에 slack을 포함시키고 LOG_CHANNEL=stack을 설정하면 오류 발생 시 자동으로 알림이 갑니다.

특정 채널에 로그 기록

Log::channel()로 대상 채널을 명시적으로 지정할 수 있습니다.

온디맨드 채널

Log::build()를 사용하면 설정 파일에 정의하지 않고 즉석에서 커스텀 채널을 만들 수 있습니다. 테스트나 일시적인 출력 대상으로의 기록에 편리합니다.

실전 유스케이스

미들웨어에서 요청 ID 부여하기

모든 로그에 공통 요청 ID를 부여하면 로그에서 특정 요청의 흐름을 추적하기 쉬워집니다.
1

미들웨어를 생성한다

2

handle() 메서드를 구현한다

3

미들웨어를 등록한다

bootstrap/app.php에서 글로벌 미들웨어로 등록합니다.
이 설정 후 모든 로그에 request-id가 자동으로 부여됩니다.

지원 중단 경고의 로그 기록

PHP나 Laravel의 지원 중단 기능을 사용했을 때의 경고를 로그에 남길 수 있습니다.
.env에서 채널을 지정합니다.

Laravel Pail — 실시간 로그 감시

Laravel Pail은 터미널에서 애플리케이션의 로그를 실시간으로 확인할 수 있는 개발 도구입니다.
Pail의 실행에는 PHP의 PCNTL 확장이 필요합니다.

설치

기본 사용법

로그 필터링

정리

  • 개발 환경: single이나 daily로 파일에 기록
  • 프로덕션 환경: stack으로 daily(파일 저장)와 slack(오류 알림)을 조합
  • 특정 처리의 로그: Log::build()로 온디맨드 채널을 생성해 독립된 파일에 기록
  • 실시간 감시: php artisan pail로 터미널에서 확인
  • debug 로그에는 기밀 정보가 포함되는 경우가 있습니다. 프로덕션 환경에서는 LOG_LEVEL=error 이상을 권장합니다.
  • 로그 파일은 정기적으로 로테이션해서 디스크를 압박하지 않도록 해 주세요(daily 채널의 days 설정).
  • Slack 같은 외부 서비스로의 알림은 레이트 리밋에 주의해 주세요. 중대한 오류만 알리도록 레벨을 설정해 주세요.
마지막 수정일 2026년 7월 13일