thinkphp5只输出cli日志,没有访问日志的解决

最近在一个项目上发现一个很奇怪的问题:thinkphp命令行的日志输出很正常,但是在runtime目录中却找不到网站的访问日志。而之前网站访问日志一直是没问题的,思前想后也没感觉最近有哪些修改会影响到日志的输出。

“runtime/log”目录如下图所示,thinkphp5突然就没了访问日志。

thinkphp5没有访问日志

thinkphp5没有访问日志

排查步骤:

1、检查开发模式是否开启。这一步不再详细描述。有的是env文件,有的是app.php配置文件,遇到此类问题的小伙伴可以自行排查。这不是本文的重点,因为这个日志之前一直是有输出的,只是突然没有访问日志了。

2、目录权限排查。

代码能否输出一个文件,目录权限有着绝对的关系。通过细心的排查我们发现以往的日志目录权限都是“www”用户,访问权限为“644”,而最新一个月的日志目录权限变成了“root”。

这就难怪!www用户无法输出文件到root用户的目录了。但是cli日志一直正常,说明thinkphp的命令行是以“root”权限运行的。

找到问题的根源了,就容易解决它。我们需要找到日志的文件输出驱动,改造其代码即可。

  1. //解决log无法输出的问题
  2.         if(!is_file($destination)){
  3.             $first = true;
  4.         }
  5.         $ret = error_log($message, 3, $destination);
  6.         try {
  7.             if(isset($first) && is_file($destination)) {
  8.                 chmod($destination, 0755);
  9.                 unset($first);
  10.             }
  11.         } catch (\Exception $e) { }
  12.         return $ret;

我们找到“/thinkphp/library/think/log/driver/File.php”文件,将上述代码复制,放在Write方法中即可。

至此问题终于得到解决。

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!