라라벨 artisan 로그 퍼미션 문제 해결

1 개요[ | ]

라라벨 로그 퍼미션 문제 해결
라라벨 artisan 로그 퍼미션 문제 해결

2 문제상황[ | ]

  • 웹서버는 웹서버 계정(www-data)으로, artisan CLI는 root계정으로 실행하는 경우...
laravel/storage의 소유자(owner)를 www-data로 해두면, root와 www-data 모두 해당 폴더에 파일을 쓸 수 있으므로 문제가 없을 것 같았다.
root@localhost:/laravel# ll | grep storage
drwx------  1 www-data www-data   4096 Oct  6 15:11 storage/
  • 그런데 daily 로그설정 상태에서, 해당일자의 로그파일을 root 계정이 먼저 생성한 경우, www-data 계정은 그 로그 파일에 쓰지 못하게 되는 문제가 있다.
root@localhost:/laravel# cd storage/logs/
root@localhost:/laravel/storage/logs# ll
total 753452
drwx------ 1 www-data www-data      4096 Oct 15 22:15 ./
drwx------ 1 www-data www-data      4096 Oct  6 15:11 ../
-rwx------ 1 www-data www-data        14 Oct  6 15:06 .gitignore*
-rw-r--r-- 1 root     root      85964708 Oct 13 23:59 laravel-2019-10-13.log
-rw-r--r-- 1 root     root     353892590 Oct 14 23:59 laravel-2019-10-14.log
-rw-r--r-- 1 root     root     331646133 Oct 15 22:29 laravel-2019-10-15.log

3 조치[ | ]

  • 라라벨 daily 로깅 설정을 아래와 같이 살짝 바꿔주면 웹서버와 artisan이 서로 다른 폴더에 로그를 기록하게 된다.[1]
  • 필자는 라라벨 5.7에서 테스트하였는데, 라라벨 5.6부터 적용 가능하다.[2]
root@localhost:/laravel/storage/logs# vi ../../config/logging.php
        'daily' => [
            'driver' => 'daily',
            #'path' => storage_path('logs/laravel.log'),
            'path' => storage_path('logs/'.php_sapi_name().'/laravel.log'),
            'level' => 'debug',
            'days' => 14,
        ],
root@localhost:/laravel/storage/logs# ll
total 757272
drwx------ 1 www-data www-data      4096 Oct 15 22:34 ./
drwx------ 1 www-data www-data      4096 Oct  6 15:11 ../
-rwx------ 1 www-data www-data        14 Oct  6 15:06 .gitignore*
drwxr-xr-x 2 www-data www-data      4096 Oct 15 22:33 apache2handler/
drwxr-xr-x 2 root     root          4096 Oct 15 22:34 cli/
-rw-r--r-- 1 root     root      85964708 Oct 13 23:59 laravel-2019-10-13.log
-rw-r--r-- 1 root     root     353892590 Oct 14 23:59 laravel-2019-10-14.log
-rw-r--r-- 1 root     root     335551713 Oct 15 22:45 laravel-2019-10-15.log
→ 각 폴더를 만들어주지 않아도 알아서 만든다.
→ 로그를 조회할 때도 따로 볼 수 있으니 더욱 좋다. 😄
→ 웹서버를 통한 로그는 apache2handler 폴더에, artisan을 통한 로그는 cli 폴더에 남게 된다.

4 같이 보기[ | ]

5 참고[ | ]

  1. 여기서는 php_sapi_name() 함수를 이용하였다. 이외에 리눅스 유저명을 이용하는 방법과 파일 퍼미션을 644로 조정하는 방법 등이 있는데, 이 방법이 가장 마음에 들었다.
  2. https://github.com/laravel/laravel/tree/5.5/config 에는 아직 logging.php가 없다.
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}