130호. Vapor 로그 설정 삽질기 free

2020-04-22

Vapor는 라라벨이 운영하는 서비스로, 라라벨 애플리케이션을 아마존 웹 서비스의 서버리스 환경으로 운영할 수 있게 해줍니다. xly.kr도 Vapor를 이용해서 운영하고 있는데요. 서버리스로 서비스를 운영하는게 처음이다보니 여러모로 삽질을 하게 되네요.


오늘 공유하고자하는 삽질기는 로그 설정 관련 삽질기입니다. Vapor가 기본적으로 웹사이트에서 로그를 볼 수 있는 UI를 제공하고 있긴 하지만 정보가 적고 기능이 매우 한정적입니다. 에러가 발생했을 때 알림을 받는 건 서비스를 운영하는데 있어 필수적인 것인데, Vapor는 그런 기능까지는 제공하지 않고 있습니다.



로그를 편하게 조회하고 알림 등을 받기 위해 외부 서비스를 쓰곤 하는데요. 저는 Bugsnag이라는 서비스를 쓰고 있었습니다. 개발 중에도 예외가 발생하면 Bugsnag에 로그가 기록되었기 때문에 아무 의심없이 올렸고 Bugsnag에 아무 로그도 올라오지 않길래 몇 달간 버그가 전혀 없는 줄 알고 있었습니다. 하지만 이는 완전 착각이었고, 버그가 왕왕 있었는데 제대로 알림을 받지 못해 인지하지 못하고 있었던 것입니다. ㅠ


제 logging.php 파일은 다음과 같이 설정되어 있었습니다.


'default' => env('LOG_CHANNEL', 'stack'),

'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'flare', 'bugsnag'],
'ignore_exceptions' => false,
],

.env 파일에 LOG_CHANNEL 항목에 값을 설정하지 않으면 ‘stack’ 채널을 사용하도록 되어 있고, stack 채널은 ‘daily’, ‘flare’, ‘bugsnag’ 채널에 로그를 보내도록 되어 있습니다.


Vapor에 배포할 때 따로 LOG_CHANNEL 값을 설정해주지 않았기 때문에 당연히 ‘stack’으로 처리 될 줄 알았던 것인데요. 실제로는 로그가 전송되지 않았습니다.


원인은 Vapor가 AWS CloudWatch에 로그를 남기기 위해 별도의 설정이 없으면 stderr 채널을 기본 채널로 설정했던 것입니다. 문제는 이와 같은 내용이 공식 메뉴얼 어디에도 안내되어 있지 않다는 것 입니다. ㄷㄷ


원인을 알고나니 해결 방법은 간단했습니다. .env에 LOG_CHANNEL을 직접 지정해주면 되는 것이었는데요. 혹시 몰라서 아래와 같이 ‘stderr’ 채널을 추가해주었습니다. 아마 없어도 될텐데, 실험은 안해봤네요.


'channels' => [
‘stack’ => [
'driver' => 'stack',
'channels' => ['daily', 'flare', 'bugsnag', ‘stderr’],
'ignore_exceptions' => false,
],

새로운 개념이고 새로운 서비스라 계속 삽질을 하고 있는데요. 앞으로도 계속 삽질기 공유하도록 하겠습니다.


1일 1식 라라벨 130호

2020년 4월 22일


이현석

메쉬 코리아 개발자. 바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서를 쓰고, 클린 아키텍처 인 PHP를 번역했습니다. 2020년에 출간될 Laravel Up & Running 2nd Edition을 번역하고 있습니다.