라라벨 로그 뷰어 패키지(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 를 볼 수 있습니다.