【问题标题】:Laravel 8.0: laravel.log file not found using storage_path()Laravel 8.0:使用 storage_path() 找不到 laravel.log 文件
【发布时间】:2021-09-22 20:42:20
【问题描述】:

我正在尝试编写一个 Laravel 8.0 任务,该任务每周重命名默认日志文件并创建另一个空文件。我正在使用 Debian 10 虚拟机作为测试环境。

这是我的handle() 代码:

$now = Carbon::now();
$baseLog = "/laravel.log";
$oldLog = storage_path("logs".$baseLog);
$renamedLog = storage_path("logs"."/log_".$now->day."_"
    .$now->month."_".$now->year.".log");

Storage::move($oldLog, $renamedLog);
Storage::delete($oldLog);
Storage::put(storage_path("logs".$baseLog), "");

问题在于 Laravel 说...

在路径中找不到文件:var/www/html/storage/logs/laravel.log

【问题讨论】:

  • 当你移动文件时,它完全移动了它,而不是复制它。 delete 方法不存在。

标签: php laravel logging scheduled-tasks laravel-8


【解决方案1】:

正如您正确指出的那样,我在移动的文件上调用了 delete(我的错),但错误发生在之前,同时试图定位 laravel.log。

添加存在检查后,我注意到返回的存储路径有一个“/app”,所以我刚刚在config/filesystems中创建了另一个磁盘实例

 'log' => [
            'driver' => 'local',
            'root' => storage_path('logs'),
        ],

然后我终于可以像这样解决我的问题了:

$baseLog = "/laravel.log";
    if(Storage::disk('log')->exists($baseLog)){
       $now = Carbon::now();
       $renamedLog ="/log_".$now->day."_".$now->month."_".$now->year.".log";
       Storage::disk('log')->move($baseLog, $renamedLog);
       Storage::disk('log')->put($baseLog, "");
    }

谢谢

【讨论】:

    【解决方案2】:

    添加检查文件是否存在而不使用删除 - 因为您移动文件:

    $baseLog = "/laravel.log";
    $oldLog = storage_path("logs".$baseLog);
    if(Storage::exists($oldLog)){
      $now = Carbon::now();
      $renamedLog = storage_path("logs"."/log_".$now->day."_".$now->month."_".$now->year.".log");
      Storage::move($oldLog, $renamedLog);
      Storage::put(storage_path("logs".$baseLog), "");
    }
    

    或者,如果这不是为了学习,请使用包进行日志轮换,例如this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 2021-08-24
      • 2015-03-28
      • 2015-05-07
      • 2012-06-21
      • 1970-01-01
      相关资源
      最近更新 更多