Laravel log 的權限問題

[華語, cmn-Hant-TW]

一直以來 Laravel 預設在本機上的 log 是單一檔案 (single),當然也可以用每天產生一個檔案 (daily) 的形式,只要在 config 裡面設好即可,設定方式隨著版本不同而有所不同,不過就以往來講我會儘量還是用 single,然後用系統的工具 (newsyslog 或是 logrotate 不同系統有不同的滾動工具) 去整理成類似 /var/log 下的形式,避免檔案太大

會這樣做主要的原因還是權限,通常來講因為網頁存取產生的 log,會以 www (依系統不同,可能是 httpd 或 www-data) 的權限寫入,使用者本機操作的話,則是用使用者的權限寫入,如果檔案還沒產生的話會自動產生,自動產生的檔案一般情況下預設是 644,也就是只有本人可以存取,假設產生檔案的是本機使用者,那當網頁遇到需要寫入 log 的時候,程式就會直接炸給你看

另外一個原因是檔案要整理,在 5.6 之前的話 daily 要自己手動清太舊的 log,平平都要用程式處理,那直接丟給系統不是比較快,到了 5.6 是可以設定要留幾天份,不過一樣會遇到權限問題

避免權限問題的一般作法是在設定環境的時候先產生一個空的 log 檔,然後把權限設成 664 也就是同群組可以存取,接著把 www 跟本機使用者都加進同一個群組,這樣就可以避開這個問題

前一陣子看到 Laravel 5.7 把預設改成 daily 了就來研究一下看看有沒有什麼進展,找一下發現這篇的留言有提到 5.6.10 之後可以針對 single 跟 daily 設定產生檔案時的權限了,那問題就解決了啊,連 singel 都不用特別注意了,只要把本機使用者跟 www 設好群組就搞定,這樣的話可以考慮試用一下 daily 的 log 了

 

 

Leave a Reply

Your email address will not be published.