每次作业的单独日志文件 运行 laravel

Separate log files for each time a job is run laravel

我有一个 Laravel 8 应用程序,其中我 运行 针对特定帐户的工作。对于每个帐户,我需要一个单独的日志文件,格式如“logFileName_122323123_2021-01-01”(logFileName__)等等。

类似问题how to customize file name of log in Laravel 8.0? 但这并不能帮助我每次 运行 作业时创建一个新文件。

我在作业构造函数中进行了尝试,但由于我是静态调用日志,因此它不会保留其值。

Config::set(['logging.channels.processPbsNormalCampaignJob.path' => storage_path('logs/processPbsNormalCampaignJob_'.$this->accountId.'_' . date('Y-m-d') . '.log')]);

最好的方法是什么?

从Laravel开始还有v8.66.0 you can create a log channel on the fly. You can check the PR as Docs

所以基于文档你可以做

Illuminate\Support\Facades\Log::build([
        'driver' => 'daily',
        'path' => storage_path('logs/processPbsNormalCampaignJob_' . $this->accountId . '_' . date('Y-m-d') . '.log'),
    ])->info('Your Log data here !!');

ManojKi运行 Appathurai 发布的答案是正确的,但是当我 运行 来自同一个命令的两个作业时我遇到了问题。意想不到的结果是建了一次日志,就无法重建了。

我现在所做的是:

创建这个辅助函数

public function initializeLogger($fileName, $channel)
    {
        $path = 'logs/'.$fileName.'.log';
        config(['logging.channels.googlelog.path' => storage_path($path)]);

        return Log::channel($channel);
    }

然后您可以创建一个特定于工作的新频道名称,例如

'importAccountEntitiesJob' => [
            'driver' => 'daily',
            'path' => storage_path('logs/importAccountEntitiesJob.log'),
            'level' => 'debug',
            'days' => 0,
        ],

这一切要做的是动态更改频道名称。现在,由于我们为每个作业提供了不同的渠道,因此我们可以轻松地为每个作业创建单独的日志,即使它们是 运行 来自单个命令。