簡體   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