2012-03-09 18 views
10

मेरे पास मेरे Django प्रोजेक्ट में main नाम का एक ऐप है। इस एप्लिकेशन को एक कई प्रबंधन आदेशों कि मैं प्रवेश करना चाहते हैं, लेकिन कुछ भी नहीं है निम्न कॉन्फ़िगरेशन के साथ stdout में दिखाया जा रहा है:कस्टम प्रबंधन आदेशों के Django लॉगिंग

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'log_to_stdout': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'stream': sys.stdout, 
      }, 
     }, 
    'loggers': { 
     'main': { 
      'handlers': ['log_to_stdout'], 
      'level': 'DEBUG', 
      'propagate': True, 
      } 
     } 
    } 

क्या मैं गलत कर रहा हूँ? मैंने my_project.main का उपयोग करने का भी प्रयास किया है, लेकिन यह भी काम नहीं करता है। मैं 1.3.0 फ़ाइनल का उपयोग कर रहा हूँ।

+0

क्या आदेश आप उत्पादन लॉग इन करने का उपयोग कर रहे हैं? – second

+0

मैंने 'logging.info' और 'logging.debug' की कोशिश की है, लेकिन उनमें से कोई भी काम नहीं करता है। इस सवाल को लिखने के बाद, मैंने देखा कि 'logging.warn' * * मुझे stdout पर एक प्रिंट देता है। – damd

उत्तर

12

आपको अपने लॉगर को नाम देने की आवश्यकता है। वर्तमान में आप रूट लकड़हारा, जो आपके हैंडलर द्वारा पकड़ा नहीं है, जिसके लिए main

बजाय logging.debug("message") लग रही है करने के लिए प्रवेश कर रहे हैं, तो आप

logger = logging.getLogger('main') 
logger.debug("message") 
1

sys.stdout पर "स्ट्रीम" सेट करना आवश्यक नहीं है। हालांकि, अगर आप एक फ़ॉर्मेटर परिभाषित करना चाहिए:

उदाहरण:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'log_to_stdout': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'formatter': 'simple', 
      }, 
     }, 
    'loggers': { 
     'main': { 
      'handlers': ['log_to_stdout'], 
      'level': 'DEBUG', 
      'propagate': True, 
     } 
    } 
} 
+0

मैंने आपके उदाहरण कोड verbatim को कॉपी-पेस्ट करके कोशिश की लेकिन फिर भी, मुझे stdout करने के लिए कुछ भी नहीं मिला। * हालांकि *, जब मैं पहले कथन के रूप में 'logging.warn (' foo ') डालता हूं, तो मुझे stdout में एक प्रिंट मिलता है। 'logging.info' और 'logging.debug' अभी भी काम नहीं करते हैं। – damd

-2

आप इन कस्टम दाखिला रहे हैं, तो क्रॉन साथ आदेश, आप "बल" सिर्फ एक पाठ फ़ाइल में उत्पादन पुनः निर्देशित द्वारा प्रवेश कर सकते हैं।

* 12 * * * python /path/to/my/custom/command.py >> /path/to/my/logfile.txt 

यह हर सुबह 12:00 पर एक क्रॉन जॉब चलेगा, और stdout करने का निर्देश दिया कुछ भी (अजगर प्रिंट बयान की तरह) लॉगफ़ाइल में किसी भी वर्तमान पाठ के concatenated इस पाठ फ़ाइल में फेंक दिया जाएगा।

यदि आप क्रॉन का उपयोग नहीं कर रहे हैं, तो बस एक एकल खोल स्क्रिप्ट बनाएं जो आपको चलाने के लिए आवश्यक सभी स्क्रिप्ट चलाती है और उन्हें मैन्युअल रूप से लॉगफाइल पर निर्देशित करती है।

python /path/to/my/custom/command.py >> /path/to/my/logfile.txt 

... और इसी तरह।

+0

धन्यवाद, लेकिन यह वह तरीका है जिसका मैंने पहले उपयोग किया था। मैं सही काम करने की कोशिश कर रहा हूं और यदि संभव हो तो Django की "अंतर्निर्मित" लॉगिंग क्षमताओं का उपयोग कर रहा हूं। – damd

+0

पर्याप्त मेला। उम्मीद है कि कोई इसमें कदम उठाएगा और आपकी मदद करेगा; मैं आदिम हूं और खोल पुनर्निर्देशन का उपयोग करता हूं। :) – patrickn

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