Rails

2009-10-27 14 views
12

में डेटाबेस में प्रत्येक SQL क्वेरी लॉग इन करें, मैं कुछ लॉग क्वेरी में सहेजना चाहता हूं, कुछ SQL क्वेरी रेल निष्पादित करता है, (अर्थात् क्रिएट, अपडेट और डिलीट करें) इसलिए मुझे सभी प्रश्नों को अवरुद्ध करने की आवश्यकता है और फिर उन्हें कुछ फ़िल्टर करें regexp और आवश्यकतानुसार उन्हें लॉग इन करें।Rails

मैं रेल कोड में ऐसी चीज़ कहां रखूं?

उत्तर

8

SQL logging in rails - संक्षेप में - आपको ActiveRecord निष्पादन विधि को ओवरराइड करने की आवश्यकता है। वहां आप लॉगिंग के लिए कोई तर्क जोड़ सकते हैं।

+4

और लॉगिंग प्रश्नों को स्वयं को अवरुद्ध नहीं करना याद रखें, या आपको एक अनंत लूप मिलेगा ... – DanSingerman

+0

@DanSingerman यह मानते हुए कि आप स्वयं SQL में क्वेरी लॉग इन करने जा रहे हैं। – thekingoftruth

0

एसक्यूएल सर्वर? यदि ऐसा है ...

असल में, मैं इसे SQL अंत में करूँगा। आप एक ट्रेस सेट अप कर सकते हैं, और एक विशेष एप्लिकेशन नाम के साथ कनेक्शन के माध्यम से आने वाली हर क्वेरी एकत्र कर सकते हैं। यदि आप इसे किसी तालिका में सहेजते हैं, तो आप बाद में उस तालिका को आसानी से पूछ सकते हैं।

13

यहाँ c0r0ner से जुड़ा हुआ का एक सरलीकृत संस्करण, उतना ही अच्छा दिखाने के लिए:

connection = ActiveRecord::Base.connection 
class << connection 
    alias :original_exec :execute 
    def execute(sql, *name) 
    # try to log sql command but ignore any errors that occur in this block 
    # we log before executing, in case the execution raises an error 
    begin 
     file = File.open(RAILS_ROOT + "/log/sql.txt",'a'){|f| f.puts Time.now.to_s+": "+sql} 
    rescue Exception => e 
     ; 
    end 
    # execute original statement 
    original_exec(sql, *name) 
    end 
end 
+1

आप इसे कहां रखेंगे? – baash05

+0

misuse.org पर पोस्ट नोट करता है कि इसे 'application.rb' द्वारा लोड किया जाना चाहिए, वहां आपको अपने ओवरराइड कोड वाली फ़ाइल की आवश्यकता हो सकती है। (रेल 2 पर, आप पर्यावरण कॉन्फ़िगरेशन फ़ाइलों के साथ फंस गए हैं।) – alxndr

1

आप mysql का उपयोग कर रहे हैं, तो मैं mysqlbinlog पर गौर करेंगे। यह उन सभी चीजों को ट्रैक करने जा रहा है जो संभावित रूप से डेटा अपडेट करते हैं। आप आसानी से उस लॉग से जो कुछ भी चाहते हैं उसे grep कर सकते हैं।

http://dev.mysql.com/doc/refman/5.0/en/mysqlbinlog.html

http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

2

एक नोट अनुयायियों के लिए, आप Rails - See generated SQL queries in Log files की तरह "सभी प्रश्नों लॉग ऑन" और फिर, जिन्हें आप चाहते हैं के लिए फ़ाइलों grep अगर वांछित कर सकते हैं।

संबंधित मुद्दे