• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    关于laravel 日志写入失败问题汇总

    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* 

    如图:

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

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

    您可能感兴趣的文章:
    • laravel日志优化实例讲解
    • 解决laravel中日志权限莫名变成了root的问题
    • 自定义Laravel (monolog)日志位置,并增加请求ID的实现
    • Laravel 5.5 异常处理 & 错误日志的解决
    • Laravel 重写日志,让日志更优雅
    上一篇:自定义Laravel (monolog)日志位置,并增加请求ID的实现
    下一篇:解决laravel中日志权限莫名变成了root的问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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