關(guān)于laravel 日志寫入失敗問(wèn)題匯總
Throw問(wèn)題
項(xiàng)目部署到Linux 服務(wù)器上后有時(shí)會(huì)出現(xiàn) 每日日志無(wú)法寫入的問(wèn)題。由此匯總一下常出現(xiàn)的問(wèn)題及解決方式。
權(quán)限問(wèn)題
導(dǎo)致無(wú)法寫入日志的問(wèn)題,是由于代碼更新時(shí)添加了文件是 root 用戶,所以創(chuàng)建日志文件也是root 權(quán)限,導(dǎo)致其它用戶的 www 權(quán)限無(wú)法寫入日志文件中。
所以修改 storage/logs/ 的用戶權(quán)限為 www
chown www:www storage/logs -R
注意:如果用戶使用supervisord服務(wù)運(yùn)行隊(duì)列的話,如果隊(duì)列里有日志記錄,那么運(yùn)行的用戶也需要改成 www 用戶。
還有一種解決方式,就是修改日志的源碼。
laravel在web模式下產(chǎn)生的日志文件(storage/logs)由www-data用戶創(chuàng)建,而在命令行(php artisan)模式下是由當(dāng)前登錄系統(tǒng)用戶創(chuàng)建。
這兩個(gè)用戶不在同一個(gè)組下,就導(dǎo)致后操作的功能無(wú)法對(duì)日志文件進(jìn)行寫操作。解決這個(gè)問(wèn)題需要修改Laravel在使用Monolog框架時(shí)的源代碼。
需要修改的文件在 vendor/laravel/framework/src/Illuminate/Log/Writer.php 第229行。
$handler = new RotatingFileHandler($path, $days, $this->parseLevel($level))
改為
$handler = new RotatingFileHandler($path, $days, $this->parseLevel($level),true,0777)
該代碼在useDailyFiles函數(shù)中,因?yàn)閏onfig/app.php中對(duì)日志框架的配置是
'log' => 'daily',
所以使用的是RotatingFileHandler,構(gòu)造函數(shù)中第五個(gè)參數(shù)是指定創(chuàng)建文件的權(quán)限。
用戶問(wèn)題
用戶問(wèn)題,也算是權(quán)限問(wèn)題。我用這個(gè)方式解決的問(wèn)題。
首先 crontab -l 查看定時(shí)任務(wù),laravel 的定時(shí)任務(wù)定義在這里。
crontab -e 修改定時(shí)任務(wù)。一切依舊。定時(shí)任務(wù)也執(zhí)行了。第二天,開始出現(xiàn)日志不可寫的問(wèn)題。
解決步驟1:修改 crontab -u www -e 定時(shí)任務(wù)配置給 www 用戶,去掉root 的定時(shí)任務(wù)。第二天不再出現(xiàn)日志不可寫問(wèn)題。
結(jié)果定時(shí)任務(wù)不再執(zhí)行。沒(méi)遇到過(guò)這樣的情況,于是同時(shí)給www 用戶和 root 用戶 都配置了 定時(shí)任務(wù)。結(jié)果還是日志不可寫。
解決步驟2:經(jīng)過(guò)一番掙扎的搜尋 ,打開了最后一次的日志。
* 號(hào) 是代表可能會(huì)有很多個(gè) cron 開頭的日志,打開最后一個(gè)即可。
vi /var/logs/cron*
如圖:
看到定時(shí)任務(wù)的錯(cuò)誤日志,進(jìn)入home 目錄,建立www文件夾。賦予權(quán)限。完成問(wèn)題的解決。
以上這篇關(guān)于laravel 日志寫入失敗問(wèn)題匯總就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
ubutu 16.04環(huán)境下,PHP與mysql數(shù)據(jù)庫(kù),網(wǎng)頁(yè)登錄驗(yàn)證實(shí)例講解
下面小編就為大家?guī)?lái)一篇ubutu 16.04環(huán)境下,PHP與mysql數(shù)據(jù)庫(kù),網(wǎng)頁(yè)登錄驗(yàn)證實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07ThinkPHP 5.x遠(yuǎn)程命令執(zhí)行漏洞復(fù)現(xiàn)
這篇文章主要介紹了ThinkPHP 5.x遠(yuǎn)程命令執(zhí)行漏洞復(fù)現(xiàn)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09淺談PHP中new self()和new static()的區(qū)別
本篇文章主要介紹了淺談PHP中new self()和new static()的區(qū)別 ,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08PHP實(shí)現(xiàn)搜索地理位置及計(jì)算兩點(diǎn)地理位置間距離的實(shí)例
這篇文章主要介紹了PHP實(shí)現(xiàn)搜索地理位置及計(jì)算兩點(diǎn)地理位置間距離的實(shí)例,地理位置搜尋的例子中使用到了MongoDB數(shù)據(jù)庫(kù),需要的朋友可以參考下2016-01-01PHP與Web頁(yè)面交互例子的實(shí)現(xiàn)
本文主要介紹了PHP?與?Web?頁(yè)面交互例子的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01