时间:2021-05-25
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 日志写入失败问题汇总就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
框架用的是laravel,其中把一些数据写入日志,保存到storage目录中,刚开始查看正常,再过一段时间文件权限就自动变成了root权限了,导致只有www权限
事务日志满指当前事务无法写入到活动日志中(主日志文件和辅助日志文件已全部用完或者没有足够当前事务写入的空间)日志磁盘空间已满指辅助日志文件还未使用完,磁盘空间已
本文实例讲述了Laravel日志用法。分享给大家供大家参考,具体如下:这里使用的Laravel版本仍是5.2日志是非常重要的。本地开发可以开启调试模式,但是上线
发现问题最近遇到了一个奇葩的问题就是应用启动失败,但是tomcat没有报任何的日志出来,log4j.properties日志级别写的是debug级别也没用。解决
很多网友在使用百度网盘下载东西的时候,异常关机了一下,启动的时候,进行下载,就显示了本地文件写入失败的问题,那么百度网盘在下载东西时显示本地文件写入失败怎么回事