加入收藏 | 设为首页 | 会员中心 | 我要投稿 濮阳站长网 (https://www.0393zz.cn/)- 专属主机、数据湖、操作系统、媒体智能、数据分析!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

laravel日志没有写入有什么原因?怎样处理?

发布时间:2022-03-21 14:23:48 所属栏目:语言 来源:互联网
导读:laravel中日志没有写入的问题如何解决?当我们把项目部署到Linux 服务器上,可能会出现日志没有写入的情况,一些朋友不清楚怎样解决这个问题,对此下面分享一下解决办法供大家参考。 权限问题 导致无法写入日志的问题,是由于代码更新时添加了文件是 root 用
       laravel中日志没有写入的问题如何解决?当我们把项目部署到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 用户 都配置了 定时任务。结果还是日志不可写。

(编辑:濮阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读