2017-10-17 105 views
0

我有兩個記錄器類。laravel在哪裏放置記錄器類

1. RequestLogger (logs all incoming api request to the DB) 
2. SqlLogger (logs all sql queries to the log file) 

我現在有他們幫助程序文件定義爲類:

1. app/Helpers/RequestLogger.php 
2. app/Helpers/SqlLogger.php 

不過,我不知道這是做正確的方式。他們寧願成爲ServiceProviders而不是幫手?目前,我很難定義在這種情況下什麼是幫助者和服務提供者。

回答

0

一般來說,文件/類都是相同的php代碼,它取決於您的喜好如何組織這些。在這種情況下,根據每個班級的操作,您可以將它們存儲在不同的地方並使用不同的約定命名。例如,就你而言,請求記錄器是成爲中間件的好候選者。由於每個API請求需要記錄,以便創建一箇中間件,例如:

namespace App\Http\Middleware; 

use Closure; 
use App\Models\Log; 

class ApiRequestLogger 
{ 

    public function handle($request, Closure $next) 
    { 
     $response = $next($request); 

     // Create the log entry here... 

     return $response; 
    } 
} 

要使用該中間件,則需要在app\Http\Kernel.php類進行註冊。簡單地說,你可以在api組中添加這種,或者你可以使用這樣的事情在$routeMiddleware添加:通過單獨或組添加在路徑聲明中間件明智

'log' => \App\Http\Middleware\ApiRequestLogger::class, 

現在,你可以在每個API航線使用,取決於你如何註冊它。

查詢日誌是一個有點不同(邏輯),因爲要記錄每個SQL查詢,那麼你可以在AppServiceProvider簡單地註冊了以下事件或在該boot方法自己的服務提供商:

\DB::listen(function ($query) { 
    // Your code here ... 
    // $query->sql 
    // $query->bindings 
    // $query->time 
    // \Log::debug($query->sql . ' - ' . serialize($query->bindings)); 
}); 

現在,這對我來說似乎沒有問題,但是不是放置所有與日誌相關的代碼,而是使用單獨的類/幫助程序文件來存儲與日誌記錄相關的代碼,這取決於您。如果你的查詢日誌很簡單,那麼爲什麼還要打擾另一個單獨的類/文件,但是你可以使用一個單獨的類,並將它存儲在一個全新的目錄中,即:services\QueryLogger.php或任何感覺對你有用的東西,但沒有最好的或預定義的方式,Laravel不會強制您組織您的代碼。只是保持簡單。


注:這些只是我的意見。關於query logging here的回答。