关于laravel 日志写入失败问题汇总


Posted in PHP onOctober 17, 2019

Throw问题

项目部署到Linux 服务器上后有时会出现 每日日志无法写入的问题。由此汇总一下常出现的问题及解决方式。

权限问题

导致无法写入日志的问题,是由于代码更新时添加了文件是 root 用户,所以创建日志文件也是root 权限,导致其它用户的 www 权限无法写入日志文件中。

所以修改 storage/logs/ 的用户权限为 www

chown www:www storage/logs -R

注意:如果用户使用supervisord服务运行队列的话,如果队列里有日志记录,那么运行的用户也需要改成 www 用户。

还有一种解决方式,就是修改日志的源码。

laravel在web模式下产生的日志文件(storage/logs)由www-data用户创建,而在命令行(php artisan)模式下是由当前登录系统用户创建。

这两个用户不在同一个组下,就导致后操作的功能无法对日志文件进行写操作。解决这个问题需要修改Laravel在使用Monolog框架时的源代码。

需要修改的文件在 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函数中,因为config/app.php中对日志框架的配置是

'log' => 'daily',

所以使用的是RotatingFileHandler,构造函数中第五个参数是指定创建文件的权限。

用户问题

用户问题,也算是权限问题。我用这个方式解决的问题。

首先 crontab -l 查看定时任务,laravel 的定时任务定义在这里。

crontab -e 修改定时任务。一切依旧。定时任务也执行了。第二天,开始出现日志不可写的问题。

解决步骤1:修改 crontab -u www -e 定时任务配置给 www 用户,去掉root 的定时任务。第二天不再出现日志不可写问题。

结果定时任务不再执行。没遇到过这样的情况,于是同时给www 用户和 root 用户 都配置了 定时任务。结果还是日志不可写。

解决步骤2:经过一番挣扎的搜寻 ,打开了最后一次的日志。

* 号 是代表可能会有很多个 cron 开头的日志,打开最后一个即可。

vi /var/logs/cron*

如图:

关于laravel 日志写入失败问题汇总

看到定时任务的错误日志,进入home 目录,建立www文件夹。赋予权限。完成问题的解决。

以上这篇关于laravel 日志写入失败问题汇总就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
How do I change MySQL timezone?
Mar 26 PHP
php生成随机数或者字符串的代码
Sep 05 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
php使用curl并发减少后端访问时间的方法分析
May 12 PHP
php+flash+jQuery多图片上传源码分享
Jul 27 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
Aug 12 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
Oct 17 #PHP
详解Laravel设置多态关系模型别名的方式
Oct 17 #PHP
Laravel 5.5 异常处理 & 错误日志的解决
Oct 17 #PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 17 #PHP
使用laravel指定日志文件记录任意日志
Oct 17 #PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 #PHP
thinkPHP事务操作简单案例分析
Oct 17 #PHP
You might like
php中使用redis队列操作实例代码
2013/02/07 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
功能强大的php分页函数
2016/07/20 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
浅谈javascript 函数属性和方法
2015/01/21 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
python编码最佳实践之总结
2016/02/14 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
python实现视频分帧效果
2019/05/31 Python
mac使用python识别图形验证码功能
2020/01/10 Python
您的网上新华书店:文轩网
2016/08/24 全球购物
购买大码女装:Lane Bryant
2016/09/07 全球购物
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
防汛通知
2015/04/25 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫