2016-12-15 10 views
8

मेरी टीम और मैं एक बड़ी परियोजना पर काम कर रहे हैं। कंट्रोलर्स में, विचारों में संगीतकार (आलसी लोडिंग) और संभवतः कुछ अन्य सेवाओं में भी देखने के लिए प्रश्न पूछ रहे हैं। इसका ट्रैक रखने में मुश्किल हो रही है और इस समय पेज लोड की गति काफी धीमी है।Laravel 5.3 - किसी पृष्ठ पर सभी प्रश्नों को कैसे लॉग इन करें?

मैं सभी प्रश्नों को लॉग इन करने और उन्हें डंप करने के लिए \ DB :: enableQueryLog() और \ DB :: getQueryLog() कहां रखूंगा? असल में मैं कोड में कुछ जगह ढूंढ रहा हूं जो किसी भी प्रश्न के होने से पहले होता है (enableQueryLog() को रखने के लिए) और मैं ऐसे स्थान की तलाश में हूं जो दृश्य प्रस्तुत करने के बाद होता है (getQueryLog() को डंप करने के लिए)।

इस बारे में जाने का एक अच्छा तरीका क्या होगा?

अग्रिम धन्यवाद।

+0

हो सकता है आप कर सकते हैं गले में एक अलग तालिका getQueryLog() की विधि –

+0

संभावित डुप्लिकेट का उपयोग करने में क्वेरी [कैसे क्वेरी Laravel 5 में मार डाला प्राप्त करने के लिए? डीबी :: getQueryLog खाली सरणी लौट रहा है] (http://stackoverflow.com/questions/27753868/how-to-get-the-query-executed-in-laravel-5-dbgetquerylog-returning-empty-arr) – Overdrivr

उत्तर

14

यहाँ आदर्श उदाहरण आता है:

https://laravel.com/docs/5.3/database#listening-for-query-events

ओपन एप्लिकेशन \ प्रदाता \ AppServiceProvider। php और Boot() फ़ंक्शन में निम्न जोड़ें:

DB::listen(function ($query) { 
    var_dump([ 
     $query->sql, 
     $query->bindings, 
     $query->time 
    ]); 
}); 
+0

मेरे अंडरस्टेनिंग से यह प्रश्न सुनना शुरू कर देता है, लेकिन मैं उन्हें कहां डंप करूंगा? मैं टर्मिनल मिडलवेयर से जुड़ा दूसरा जवाब देखता हूं। तो एक अच्छा तरीका मिडलवेयर में टर्मिनेट() विधि को कार्यान्वित करना और वहां डंप करना होगा? – devk

+1

आप केवल लॉग :: जानकारी ($ query-> sql) –

+1

इतना हां कर सकते हैं। आवश्यकता होने पर लागू करने में आसान है। '\ Log :: डीबग ('क्वेरी', [...]) का उपयोग करके 'मैं सब कुछ लार्वा लॉग में लॉग इन करने में सक्षम था और अक्षम क्वेरी को निष्पादित किया जा रहा था जहां मैं इसके बजाय लोड उत्सुक कर सकता था। धन्यवाद। – Stoutie

0

एक मध्यस्थ के बाद अनुरोध किया जाता है निष्पादित करता है और आपके प्रश्नों का लॉग कि जोड़ें ... देखना Terminable Middlwares

+0

इससे समय समाप्त होने पर प्रश्न समाप्त हो जाएंगे क्योंकि अनुरोध पूरा होने पर टर्मिनेबल मिडलवेयर को बुलाया जाता है। – Mjh

0

क्या आप MySQL का उपयोग कर रहे हैं? आप सिर्फ लॉग को पूंछ कर सकते हैं।

How to show the last queries executed on MySQL?

या Laravel डीबग बार का उपयोग करें?

5

आप प्रदाता/AppServiceProvider.php फ़ाइल में जोड़ना और पूंछ के साथ laravel लॉग फ़ाइल में उन्हें देख सकते हैं:

tail -f storage/logs/laravel.log 

तुम भी प्रश्नों आप लॉग इन करना चाहते साथ फ़िल्टर कर सकते हैं। उदाहरण के लिए, यहां मैं लार्वा पासपोर्ट का उपयोग कर रहा था, और सभी ओथ प्रश्नों को लॉग इन नहीं करना चाहता था।

use Illuminate\Support\Facades\App; 
use Illuminate\Support\Facades\Event; 
use Illuminate\Support\Facades\Log; 

public function register() { 
    if (App::environment('local') && env('APP_URL') == 'http://localhost') { 
     Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) { 
      // filter oauth ones 
      if (!str_contains($query->sql, 'oauth')) { 
       Log::debug($query->sql . ' - ' . serialize($query->bindings)); 
      } 
     }); 
    } 
} 
संबंधित मुद्दे