2010-01-08 12 views
6

मैंने लॉगिंग मॉड्यूल प्रलेखन के माध्यम से पढ़ा है और जब तक मुझे कुछ स्पष्ट याद आ गया हो, तो मुझे जो कोड मिला है वह इरादे के रूप में काम नहीं कर रहा है। मैं पायथन 2.6.4 का उपयोग कर रहा हूँ।पाइथन एकाधिक फाइलों पर लॉगिंग

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

मिनट में मेरा कोड क्या कर रहा है पाठ फ़ाइल में सही ढंग से लॉगिंग कर रहा है, थोड़े। लेकिन स्क्रीन पर लॉगिंग को डुप्लिकेट किया जा रहा है, एक निर्दिष्ट प्रारूपण के साथ, और बिना किसी के। साथ ही, जब मैं स्क्रीन आउटपुट बंद करता हूं, तब भी मुझे एक बार मुद्रित पाठ मिल रहा है, जिसे मैं नहीं चाहता - मैं बस इसे फ़ाइल में लॉग इन करना चाहता हूं।

वैसे भी, कुछ कोड: वहाँ

#logger.py 
import logging 
from logging.handlers import RotatingFileHandler 
import os 

def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG):   
    logdir = os.path.abspath(logdir) 

    if not os.path.exists(logdir): 
     os.mkdir(logdir) 

    log = logging.getLogger('stumbler') 
    log.setLevel(loglevel) 

    log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s") 

    if txtlog: 
     txt_handler = RotatingFileHandler(os.path.join(logdir, "Stumbler.log"), backupCount=5) 
     txt_handler.doRollover() 
     txt_handler.setFormatter(log_formatter) 
     log.addHandler(txt_handler) 
     log.info("Logger initialised.") 

    if scrnlog: 
     console_handler = logging.StreamHandler() 
     console_handler.setFormatter(log_formatter) 
     log.addHandler(console_handler) 

कुछ भी नहीं असामान्य।

2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3 
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3 
2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe 
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe 

हालांकि textfile सही ढंग से स्वरूपित उत्पादन हो रहा है, logger.py में स्क्रीन प्रवेश बंद करने से अभी भी प्रदर्शित प्रारूप गलत आउटपुट है:

#core.py 
import logging 
corelog = logging.getLogger('stumbler.core') # From what I understand of the docs, this should work :/ 

class Stumbler: 
    [...] 

    corelog.debug("Messages and rainbows...") 

स्क्रीन उत्पादन यह कैसे दोहराया जा रहा है पता चलता ।

जो मैं दस्तावेज़ों को समझता हूं, कोरलॉग.डेबग() को कॉल करने से, कोरलॉग के रूप में देखकर "स्टंबलर" लॉगर का बच्चा होता है, इसे उस स्वरूपण का उपयोग करना चाहिए और लॉग को आउटपुट करना चाहिए।

इस तरह के एक मामूली मुद्दे पर निबंध के लिए माफ़ी।

टीएल; डीआर: मैं एकाधिक फाइलों से लॉगिंग कैसे करूं?

उत्तर

12

क्या आप सुनिश्चित हैं कि आपके द्वारा आयात की जाने वाली किसी भी अन्य लॉगिंग सेटअप की जा रही है।

आपके कंसोल लॉग में गलत आउटपुट लॉगर के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन की तरह दिखता है, इसलिए कुछ और इसे स्थापित कर सकता है।

इस त्वरित परीक्षण स्क्रिप्ट चल रहा है:

import logging 
from logging.handlers import RotatingFileHandler 
import os 

def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG): 
    logdir = os.path.abspath(logdir) 

    if not os.path.exists(logdir): 
     os.mkdir(logdir) 

    log = logging.getLogger('stumbler') 
    log.setLevel(loglevel) 

    log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s") 

    if txtlog: 
     txt_handler = RotatingFileHandler(os.path.join(logdir, "Stumbler.log"), backupCount=5) 
     txt_handler.doRollover() 
     txt_handler.setFormatter(log_formatter) 
     log.addHandler(txt_handler) 
     log.info("Logger initialised.") 

    if scrnlog: 
     console_handler = logging.StreamHandler() 
     console_handler.setFormatter(log_formatter) 
     log.addHandler(console_handler) 



setup_logging('/tmp/logs') 
corelog = logging.getLogger('stumbler.core') 
corelog.debug("Messages and rainbows...") 

इस परिणाम पैदावार:

2010-01-08 15: 39: 25,335 - डीबग :: संदेश और इंद्रधनुष ...

और मेरे /tmp/logs/Stumbler.log

2010-01-08 15: 39: 25,335 - INFO :: लॉगर प्रारंभ हुआ। 2010-01-08 15: 39: 25,335 - डीबग :: संदेशों और इंद्रधनुष ...

यह काम अपेक्षा के अनुरूप जब मैं अजगर 2.4, 2.5 में यह भाग गया, और 2.6.4

+1

वाह , सटीक। मैं लॉगिंग कर रहा था। BasicConfig() अभी भी मेरे कुछ अन्य मॉड्यूल में इस्तेमाल किया जा रहा है। यह मेरे लिए कभी नहीं हुआ कि वे समस्याएं पैदा कर सकते हैं। धन्यवाद! – Loix0

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