라라벨 로그 뷰어 패키지(laravel log viewer package)로 로그 파일 웹에서 보기
서비스를 운영하다 보면 app level 의 로그를 봐야하는 경우가 자주 발생합니다. sentry 나 bugsnag 같은 별도의 logging & monitoring 시스템과 연동되어 있다면 대시보드에서 보면 되지만 이런 시스템을 쓰지 않거나 간단한 app 라면 자체적인 로그 파일 뷰어 정도면 충분합니다.
라라벨에는 간단하게 log file 을 볼 수 있는 여러 패키지가 있는데 그 중에 다음 2가지가 가장 사용자가 많고 유명합니다.
이중에 ARCANEDEV/LogViewer 패키지가 최근까지 업데이트되고 있으므로 저는 이 패키지를 자주 사용합니다.
설치
라라벨 패키지이므로 composer 로 설치하면 됩니다.
composer require arcanedev/log-viewer
저는 package auto discovery 기능을 좋아하지 않고 config/app.php 에 직접 Provider 를 추가하는게 사용하는 패키지를 명확하게 알수 있어서 선호합니다.
'providers' => [ // .... Arcanedev\LogViewer\LogViewerServiceProvider::class, ],
프로바이더 설정이 끝났으면 config 파일과 다개국어 언어 파일을 퍼블리싱합니다.
php artisan log-viewer:publish
__ _ / / ___ __ _/\ /(_) _____ _____ _ __ / / / _ \ / _` \ \ / / |/ _ \ \ /\ / / _ \ '__| / /__| (_) | (_| |\ V /| | __/\ V V / __/ | \____/\___/ \__, | \_/ |_|\___| \_/\_/ \___|_| |___/ Version 8.0.3 - Created by ARCANEDEV� Copied File [\vendor\arcanedev\log-viewer\config\log-viewer.php] To [\config\log-viewer.php] Copied Directory [\vendor\arcanedev\log-viewer\translations] To [\resources\lang\vendor\log-viewer] Copied Directory [\vendor\arcanedev\log-viewer\views] To [\resources\views\vendor\log-viewer] Publishing complete.
여러 언어 파일이 설치되는데 어려운 내용이 없으므로 기본 언어 파일만 사용해도 충분하므로 다음 명령어로 config 만 퍼블리싱할 수 있습니다.
php artisan log-viewer:publish --tag=config
이제 config/logging.php 에 로그 채널을 daily 로 설정해야 합니다. 라라벨 로그 파일 권한(laravel log file permission) 문제 해결 를 참고해서 config/logging.php 에 로그 채널을 설정해 줍니다.
'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['daily'], 'ignore_exceptions' => false, 'days' => 120, ],
설정이 끝났으면 다음 명령어로 정상 설정 여부 확인할 수 있습니다.
php artisan log-viewer:check
log viewer 사용
log-viewer 는 기본적으로 route 에 등록되므로 설정후에 웹 브라우저로 APP_URL/log-viewer 에 연결하면 라라벨 로그를 볼 수 있습니다.
퍼블리싱한 config/log-viewer.php 에 log-viewer 설정이 있는데 눈여겨 봐야할 부분은 다음 항목으로 log-viewer 는 기본적으로 middleware 가 없으므로 기본 설정으로는 인증없이 모두가 URL 만 알면 로그를 볼수 있으므로 보안상 매우 취약하게 됩니다.
<?php use Arcanedev\LogViewer\Contracts\Utilities\Filesystem; return [ 'route' => [ 'enabled' => true, 'attributes' => [ 'prefix' => 'log-viewer', 'middleware' => env('ARCANEDEV_LOGVIEWER_MIDDLEWARE') ? explode(',', env('ARCANEDEV_LOGVIEWER_MIDDLEWARE')) : null, ], ],
이 문제를 해결하기 위해 .env 에 다음과 같이 log-viewer 용 미들웨어를 등록할수 있습니다.
ARCANEDEV_LOGVIEWER_MIDDLEWARE=web,auth
하지만 운영 이관시 .env 에 해당 설정을 빼 먹을 수 있으므로 config/log-viewer.php 에 기본 미들웨어를 등록하는 걸 권장합니다.
<?php use Arcanedev\LogViewer\Contracts\Utilities\Filesystem; return [ 'route' => [ 'enabled' => true, 'attributes' => [ 'prefix' => 'log-viewer', 'middleware' => env('ARCANEDEV_LOGVIEWER_MIDDLEWARE') ? explode(',', env('ARCANEDEV_LOGVIEWER_MIDDLEWARE')) : ['web','auth'], ], ],
이제 log-viewer 에 접속해도 인증을 거쳐야하므로 권한있는 관리자만 laravel log 를 볼 수 있습니다.