서비스를 운영하다 보면 app level 의 로그를 봐야하는 경우가 자주 발생합니다. sentrybugsnag 같은 별도의 logging & monitoring 시스템과 연동되어 있다면 대시보드에서 보면 되지만 이런 시스템을 쓰지 않거나 간단한 app 라면 자체적인 로그 파일 뷰어 정도면 충분합니다.


라라벨에는 간단하게 log file 을 볼 수 있는 여러 패키지가 있는데 그 중에 다음 2가지가 가장 사용자가 많고 유명합니다.


이중에 ARCANEDEV/LogViewer 패키지가 최근까지 업데이트되고 있으므로 저는 이 패키지를 자주 사용합니다.


설치

라라벨 패키지이므로 composer 로 설치하면 됩니다.

composer require arcanedev/log-viewer
BASH


저는 package auto discovery 기능을 좋아하지 않고 config/app.php 에 직접 Provider 를 추가하는게 사용하는 패키지를 명확하게 알수 있어서 선호합니다.

'providers' => [
	// ....
	Arcanedev\LogViewer\LogViewerServiceProvider::class,
],
PHP

프로바이더 설정이 끝났으면  config 파일과 다개국어 언어 파일을 퍼블리싱합니다.

php artisan log-viewer:publish
BASH
   __                   _
  / /  ___   __ _/\   /(_) _____      _____ _ __
 / /  / _ \ / _` \ \ / / |/ _ \ \ /\ / / _ \ '__|
/ /__| (_) | (_| |\ 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.
BASH

여러 언어 파일이 설치되는데 어려운 내용이 없으므로 기본 언어 파일만 사용해도 충분하므로 다음 명령어로 config 만 퍼블리싱할 수 있습니다.

php artisan log-viewer:publish --tag=config
BASH


이제 config/logging.php 에 로그 채널을 daily 로 설정해야 합니다. 라라벨 로그 파일 권한(laravel log file permission) 문제 해결 를 참고해서 config/logging.php 에 로그 채널을 설정해 줍니다.

'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['daily'],
            'ignore_exceptions' => false,
            'days' => 120,
        ],
PHP

설정이 끝났으면 다음 명령어로 정상 설정 여부 확인할 수 있습니다.

php artisan log-viewer:check
BASH


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,
    ],
  ],
PHP

이 문제를 해결하기 위해 .env 에 다음과 같이 log-viewer 용 미들웨어를 등록할수 있습니다.

ARCANEDEV_LOGVIEWER_MIDDLEWARE=web,auth
CODE


하지만 운영 이관시 .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'], 
    ],
 ],
PHP


이제 log-viewer 에 접속해도 인증을 거쳐야하므로 권한있는 관리자만 laravel log 를 볼 수 있습니다.

같이 보기


Ref