繁体   English   中英

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

[英]Separate log files for each time a job is run laravel

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

类似问题如何在Laravel 8.0 中自定义日志文件名? 但这并不能帮助我每次运行作业时创建一个新文件。

我在我的工作构造函数中尝试过,但由于我静态调用 Log,它不保留其值。

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

最好的方法是什么?

从 Laravel v8.66.0开始,您可以即时创建日志通道。 您也可以将PR作为文档查看

所以基于文档你可以做

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

ManojKiran 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,
        ],

所有这一切要做的是动态更改频道的名称。 现在,由于每个作业都有不同的通道,我们可以轻松地为每个作业创建单独的日志,即使它们是通过单个命令运行的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM