2010-04-19 13 views
13

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

#config/environments/production.rb 
config.logger = Logger.new(config.log_path) 
config.log_level = :error 
config.logger.level = Logger::ERROR 

#config/environment.rb 
class Logger 
    def format_message(level, time, progname, msg) 
    "**********************************************************************\n#{level} #{time.to_s(:db)} -- #{msg}\n" 
    end 
end 

तो मैं संदेश ठीक अनुकूलित कर सकते हैं, फिर भी मैं यहाँ पैरामीटर/अनुरोध चर उपयोग करने में सक्षम होने के लिए नहीं है। क्या किसी को पता है कि यह संभव है, और यदि ऐसा है तो कैसे? या अगर यह जानकारी प्राप्त करने का कोई बेहतर तरीका है? (शायद भी कुछ Redis आधारित?)

धन्यवाद भार,

दान

उत्तर

0

आप अनुरोध वर्ग

पुट request.uri की तरह में दिखना चाहिए।

अधिक विस्तार http://api.rubyonrails.org/classes/ActionController/AbstractRequest.html

+0

धन्यवाद उपाध्यक्ष, लेकिन यह काम करने के लिए प्रतीत नहीं होता। मेरा मानना ​​है, क्योंकि अधिकांश रेल लोड होने से पहले लॉगर कॉन्फ़िगर किया गया है, इसके पास @env चर, या वास्तव में पैरा/अनुरोध चर तक पहुंच नहीं है। @env, format_message के दायरे के भीतर नहीं के बराबर है के रूप में अनुरोध है, और इस तरह त्रुटियों भी REQUEST_URI। –

3

के लिए यहाँ की जांच यह काम करना चाहिए! :) चीयर्स।

logger.info({:user_agent => request.user_agent, :remote_ip => request.remote_ip}.inspect)

logger.info(params.inspect)

तक .. इस करके अपने नियंत्रक कार्रवाई में रखा जाना चाहिए। उदाहरण के लिए: आप अपने बनाने कार्रवाई यह जगह अगर यह भी USER_AGENT ब्राउज़र यानी, remote_ip यानी उपयोगकर्ता के दूरदराज के आईपी और सभी पैरामीटर लॉग इन करना चाहिए।

+0

हाय धान, इसके लिए धन्यवाद। जबकि इस काम करेगा, वहाँ स्वचालित रूप से अनुरोध/पैरामीटर लकड़हारा खुद के लिए उपलब्ध करने के लिए एक तरीका है? अर्थात। अगर, नियंत्रक से logger.info/warn/error को कॉल करने के बजाय, इसे कोड में कहीं भी उठाए गए अपवाद से बुलाया गया है। जैसे मैं कोड में current_user.profesion.blank को एक तरफ से कॉल कर सकता हूं? यह त्रुटि होगी क्योंकि प्रोफेशन पेशे होना चाहिए (शून्य आदि पर अपरिभाषित कार्य)। यूआरएल/वर्तमान पैरा के साथ-साथ स्टैक ट्रेस होने के लॉग में यह बहुत अच्छा होगा। –

+0

मैंने कोशिश की। लेकिन जैसा कि आपने कहा है कि रेल लोड होने से पहले लॉगर कॉन्फ़िगर किया गया है।मुझे यह आलेख मिला जो मुझे नहीं पता कि यह कितना उपयोगी हो सकता है: http://www.ubuntusolutions.org/2009/08/custom-logger-in-rails.html –

+0

हाँ। किसी अन्य तरीके से किसी भी तरह से वर्ग/कोड को विस्तारित किया जा सकता है जो संदेश में कुछ अतिरिक्त डेटा जोड़ने के लिए पहले स्थान पर राइज/लॉगर को कॉल करता है? यहां तक ​​कि केवल एक्शनकंट्रोलर भी? –

25

(एक लंबे समय के बाद इस लिए कहा गया था जवाब देते, लेकिन शायद यह अगले व्यक्ति में मदद मिलेगी।)

मैं बस कुछ इसी तरह की थी।

1) आपको लॉग इन अनुरोध-छुट्टी विवरण से अलग, अपने लकड़हारा ओवरराइड करने के लिए की जरूरत है। ऐसा लगता है कि आपने अपने लॉगर को अनुकूलित करने का अनुमान लगाया है। उत्तर यहां है: Rails logger format string configuration

2) मैं अपनी सेवा में सभी अनुरोधों के अनुरोध और प्रतिक्रिया को लॉग करता हूं। ध्यान दें, कि रेल हेडर में एक टन सामान डालता है, इसलिए अनुरोध को सीधे डंप करना या हेडर शायद एक बुरा विचार है। ध्यान दें, मेरा आवेदन प्राथमिक रूप से एपीआई के माध्यम से पहुंचाया जाता है। यदि आपका मुख्य रूप से एक वेब-ऐप है, क्योंकि मैं ज्यादातर लोगों का अनुमान लगा रहा हूं, तो शायद आप प्रतिक्रिया का निरीक्षण नहीं करना चाहते हैं। क्योंकि इसमें आपका एचटीएमएल होगा।

class ApplicationController < ActionController::Base 
    around_filter :global_request_logging 
... 
    def global_request_logging 
    http_request_header_keys = request.headers.keys.select{|header_name| header_name.match("^HTTP.*")} 
    http_request_headers = request.headers.select{|header_name, header_value| http_request_header_keys.index(header_name)} 
    logger.info "Received #{request.method.inspect} to #{request.url.inspect} from #{request.remote_ip.inspect}. Processing with headers #{http_request_headers.inspect} and params #{params.inspect}" 
    begin 
     yield 
    ensure 
     logger.info "Responding with #{response.status.inspect} => #{response.body.inspect}" 
    end 
    end 
end 
+1

यह वही है जो मैं ढूंढ रहा था। महान काम किया। धन्यवाद। – Howler

+0

यह प्रतिक्रिया अद्भुत है! धन्यवाद –

+2

असल में यह केवल मेरे लिए काम करता है जब 'request.headers' से 'request.headers.env' में बदल जाता है। (मैं रेल 4 का उपयोग कर रहा हूँ)। संपादन सुझाव बनाया गया। – Medeiros

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