2012-11-20 10 views
35

मैं स्क्रीन पर क्यों इस कोड प्रिंट पता नहीं है, लेकिन फाइल करने के लिए नहीं है? फ़ाइल "example1.log" बनाई गई है, लेकिन वहां कुछ भी लिखा नहीं गया है।अजगर basicConfig विधि का उपयोग कर सांत्वना देने लॉग इन करें और फ़ाइल

#!/usr/bin/env python3 
import logging 

logging.basicConfig(level=logging.DEBUG, 
        format='%(asctime)s %(message)s', 
        handlers=[logging.FileHandler("example1.log"), 
           logging.StreamHandler()]) 
logging.debug('This message should go to the log file and to the console') 
logging.info('So should this') 
logging.warning('And this, too') 

मैं एक प्रवेश वस्तु (example code) बनाने के द्वारा इस समस्या को "नजरअंदाज" है, लेकिन यह मुझे गुस्सा दिलाना रहता है क्यों basicConfig() दृष्टिकोण में विफल रहा है?

पी एस। अगर मैं basicConfig कॉल को बदलने के लिए:

logging.basicConfig(level=logging.DEBUG, 
        filename="example2.log", 
        format='%(asctime)s %(message)s', 
        handlers=[logging.StreamHandler()]) 

तब सभी लॉग फ़ाइल में हैं और कुछ भी नहीं कंसोल में दिखाई देता

+3

अजगर 2.7 में, केवल कीवर्ड तर्क basicConfig समझता है कि "फ़ाइल नाम", "filemode", "धारा", "प्रारूप", "datefmt" और "स्तर" कर रहे हैं। "हैंडलर" कुछ नहीं करता है। – TocToc

उत्तर

15

मैं इसे अजगर 3.3 पर पुन: पेश नहीं कर सकते। संदेश स्क्रीन पर और 'example2.log' दोनों पर लिखे गए हैं। पायथन < 3.3 पर यह फ़ाइल बनाता है लेकिन यह खाली है।

कोड:

from logging_tree import printout # pip install logging_tree 
printout() 

पता चलता है कि FileHandler() अजगर < 3.3 पर रूट लकड़हारा से जुड़ी नहीं है।

logging.basicConfig() के लिये दस्तावेज का कहना है कि handlers तर्क अजगर 3.3 में जोड़ा जाता है। पाइथन 3.2 दस्तावेज में handlers तर्क का उल्लेख नहीं किया गया है।

+0

आप सही हैं! हालांकि, असमर्थित सुविधाओं का उपयोग करते समय मुझे अपवाद नहीं मिलना चाहिए? यह स्वीकार करने में शर्म की बात है कि मैंने इस पर कितना समय बर्बाद कर दिया है ... – Jovik

+1

@ जोविक: शायद कुछ तर्क पीछे है हालांकि मैं इस समय इसे नहीं देख रहा हूं। आप http://bugs.python.org – jfs

+2

पर रिपोर्ट करने के लिए कोशिश कर सकते [सूचना दी] (http://bugs.python.org/issue16521) – Jovik

26

दोनों कंसोल के लिए इस काम के ठीक (अजगर 2.7 में परीक्षण किया गया) की कोशिश करो और नीचे फाइल

# set up logging to file 
logging.basicConfig(
    filename='twitter_effect.log', 
    level=logging.INFO, 
    format= '[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s', 
    datefmt='%H:%M:%S' 
) 

# set up logging to console 
console = logging.StreamHandler() 
console.setLevel(logging.DEBUG) 
# set a format which is simpler for console use 
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') 
console.setFormatter(formatter) 
# add the handler to the root logger 
logging.getLogger('').addHandler(console) 

logger = logging.getLogger(__name__) 
4

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

import logging 
logging.root.handlers = [] 
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO , filename='ex.log') 

# set up logging to console 
console = logging.StreamHandler() 
console.setLevel(logging.ERROR) 
# set a format which is simpler for console use 
formatter = logging.Formatter('%(asctime)s : %(levelname)s : %(message)s') 
console.setFormatter(formatter) 
logging.getLogger("").addHandler(console) 

logging.debug('debug') 
logging.info('info') 
logging.warning('warning') 
logging.error('error') 
logging.exception('exp') 
संबंधित मुद्दे