2011-03-29 16 views
13

हमारे उत्पादन लॉग लंबे हैं और केवल त्रुटियों से बहुत अधिक हैं। मुझे केवल दूसरी त्रुटियों के साथ एक दूसरी लॉग फ़ाइल चाहिए जिसमेंमैं Rails त्रुटियों को एक अलग लॉग फ़ाइल में कैसे लॉग कर सकता हूं?

क्या यह संभव है?

हम रेल का उपयोग कर रहे हैं 2.x

धन्यवाद।

+0

संभव डुप्लिकेट [एक स्वतंत्र लॉग फ़ाइल में रेल में कुछ प्रवेश कैसे करें?] (http://stackoverflow.com/questions/337739/how-to-log-something-in-rails-in-an-independent-log-file) – fl00r

+4

मुझे नहीं लगता कि यह एक डुप्लिकेट है - यह एक अलग सवाल है। मानक लॉग फ़ाइलों को स्वचालित रूप से एक और अधिक फ़ाइल में लॉगिंग करने के बजाय मानक लॉग फ़ाइलों को स्वचालित रूप से विभाजित करने के तरीके के बारे में। –

उत्तर

5

उदाहरण के लिए, लॉग नामक एक फ़ाइल में सभी ActiveRecord :: बेस त्रुटियों लॉग इन करने/exceptions.log

new_logger = Logger.new('log/exceptions.log') 
new_logger.level = Logger::ERROR 
new_logger.error('THIS IS A NEW EXCEPTION!') 

ActiveRecord::Base.logger = new_logger 

नियंत्रकों और दृश्य के लिए (ActionView लकड़हारा नहीं है, क्योंकि यह खुद लकड़हारा है, तो यह निर्भर करता है एक्शनकंट्रोलर लॉगर पर):

ActionController::Base.logger = new_logger 
+1

क्या सामान्य रूप से अपवादों के लिए ऐसा करने का कोई तरीका है? या शायद अपनी फाइलों में erb/नियंत्रक त्रुटियों को लॉग भी कर सकते हैं? –

+0

नियंत्रकों/विचारों को कैसे करें पोस्ट किया गया। –

+3

यह केवल त्रुटियों के लिए कैसे होगा? आप स्पष्ट रूप से एक जानकारी लॉगिंग कर रहे हैं और यह upss.log में समाप्त होता है? – Khash

7

निम्न का प्रयास करें। Rescue_from विधि को अपने नियंत्रक में रखें।

मैंने इसका परीक्षण नहीं किया है। लेकिन शायद यह सही दिशा

class ApplicationController < ActionController::Base 
    rescue_from StandardError do |exception| 
    new_logger = Logger.new('log/exceptions.log') 
    new_logger.info('THIS IS A NEW EXCEPTION!') 
    new_logger.info(exception.message) 
    new_logger.info(exception.backtrace) 
    # Raise it anyway because you just want to put it in the log 
    raise exception 
    end 
end 

में डालता है आप रेल 2.1 (भी परीक्षण नहीं) का उपयोग करते हैं

class ApplicationController < ActionController::Base 
    def rescue_action_in_public(exception) 
    new_logger = Logger.new('log/exceptions.log') 
    new_logger.info('THIS IS A NEW EXCEPTION!') 
    new_logger.info(exception.message) 
    new_logger.info(exception.backtrace) 
    # Raise it anyway because you just want to put it in the log 
    raise exception 
    end 
end 
की
संबंधित मुद्दे