मैं हाल ही में एक बहुत ही हल्के वजन वाले वर्ग चाहता था जो लॉगिंग स्तर के आधार पर अलग-अलग मात्रा में उत्पादन करेगा जो प्रोग्रामेटिक रूप से सेट किया जा सकता है। लेकिन जब भी मैं डिबगिंग संदेश या त्रुटि या चेतावनी को आउटपुट करना चाहता था, मैं हर बार क्लास को तुरंत नहीं करना चाहता था। लेकिन मैं भी इस लॉगिंग सुविधा के कामकाज को एनकाउंटर करना चाहता था और बिना किसी ग्लोबल्स की घोषणा के इसे फिर से उपयोग करना चाहता था।
इसलिए मैंने @classmethod
इसे प्राप्त करने के लिए वर्ग चर और सज्जाकार का उपयोग किया।
अपनी सरल लॉगिंग कक्षा के साथ, मैं निम्नलिखित कार्य कर सकता हूं:
Logger._level = Logger.DEBUG
फिर, मेरे कोड में, अगर मैं डिबगिंग जानकारी का एक गुच्छा बाहर थूकना चाहता था, मुझे बस कोड करना था
Logger.debug( "this is some annoying message I only want to see while debugging" )
त्रुटियों के साथ बाहर रखा जा सकता है
Logger.error( "Wow, something really awful happened." )
"उत्पादन" वातावरण में, मैं निर्दिष्ट कर सकता हूं
Logger._level = Logger.ERROR
और अब, केवल त्रुटि संदेश आउटपुट होगा। डिबग संदेश मुद्रित नहीं किया जाएगा।
यहाँ मेरी कक्षा है:
class Logger :
''' Handles logging of debugging and error messages. '''
DEBUG = 5
INFO = 4
WARN = 3
ERROR = 2
FATAL = 1
_level = DEBUG
def __init__( self ) :
Logger._level = Logger.DEBUG
@classmethod
def isLevel( cls, level ) :
return cls._level >= level
@classmethod
def debug( cls, message ) :
if cls.isLevel( Logger.DEBUG ) :
print "DEBUG: " + message
@classmethod
def info( cls, message ) :
if cls.isLevel( Logger.INFO ) :
print "INFO : " + message
@classmethod
def warn( cls, message ) :
if cls.isLevel( Logger.WARN ) :
print "WARN : " + message
@classmethod
def error( cls, message ) :
if cls.isLevel( Logger.ERROR ) :
print "ERROR: " + message
@classmethod
def fatal( cls, message ) :
if cls.isLevel( Logger.FATAL ) :
print "FATAL: " + message
और कुछ कोड जो इसे थोड़ा परीक्षण करते हैं:
def logAll() :
Logger.debug( "This is a Debug message." )
Logger.info ( "This is a Info message." )
Logger.warn ( "This is a Warn message." )
Logger.error( "This is a Error message." )
Logger.fatal( "This is a Fatal message." )
if __name__ == '__main__' :
print "Should see all DEBUG and higher"
Logger._level = Logger.DEBUG
logAll()
print "Should see all ERROR and higher"
Logger._level = Logger.ERROR
logAll()