概要
- ログファイルのパーミッションを、ローカル環境では手軽さ重視で666にしたいけど、本番では横着せず664か644あたりにしたい
- という設定をlaravelの.envファイルでやりたい
通常の書き方(設定値直書き)
logging.php
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => env('LOG_DAILY_DAYS', 14),
'replace_placeholders' => true,
'permission' => 0666, # ここを設定値化したい
],
解その1
logging.php
'daily' => [
(略)
'permission' => octdec(env('LOG_PERMISSION')),
],
.env.dev(開発環境用.env)
LOG_PERMISSION=666
.env.prod(本番環境用.env)
LOG_PERMISSION=664
解説
通常は 0xxx
のように先頭に0をつけることで8進数化させている。
envから読み込んだ値を8進数化するには、octdecを用いる。
解その2
logging.php
'daily' => [
(略)
'permission' => env('LOG_PERMISSION'),
],
.env.dev(開発環境用.env)
# 8進数の666を10進数にすると438
LOG_PERMISSION=438
.env.prod(本番環境用.env)
# 8進数の664を10進数にすると436
LOG_PERMISSION=436
これでもいけるけど、解1のほうが直感的かなあと。
だめな例
logging.php
'daily' => [
(略)
'permission' => env('LOG_PERMISSION'),
],
.env
LOG_PERMISSION=666
結果
--w--wx-wT 1 apache 1000 689998 Mar 5 21:19 laravel-2025-03-05.log
666を10進数として受け取り、8進数に変換した1232が適用される。
ポエム
monologの設定値permissionが
8進数を受け取るのが基本
なのだけど、
10進数を受け取ると、ご丁寧に8進数に変換してくれる
というあたりが地味にいやーんだなと思う次第