Laravel 8.0: 使用 storage_path() 找不到 laravel.log 文件

Laravel 8.0: laravel.log file not found using storage_path()

我正在尝试编写一个 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 说...

File not found at path: var/www/html/storage/logs/laravel.log

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

$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

正如您正确指出的那样,我在移动的文件上调用了删除(我的错),但错误发生在之前,同时试图找到 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, "");
    }

谢谢