ব্যবহারের অভিজ্ঞতার একগুচ্ছের সাথে বিদ্যমান সমস্ত উত্তরগুলির সংমিশ্রণ, আমি মনে করি যে নতুন স্তরের সম্পূর্ণ নির্বিঘ্ন ব্যবহার নিশ্চিত করার জন্য প্রয়োজনীয় সমস্ত কিছুগুলির একটি তালিকা আমি এনেছি। নীচের পদক্ষেপগুলি ধরে নেওয়া যায় যে আপনি TRACE
মান সহ একটি নতুন স্তর যুক্ত করছেন logging.DEBUG - 5 == 5
:
logging.addLevelName(logging.DEBUG - 5, 'TRACE')
নতুন স্তরের অভ্যন্তরীণভাবে নিবন্ধিত হওয়ার জন্য অনুরোধ করা দরকার যাতে এটি নাম অনুসারে রেফারেন্স করা যায়।
- নতুন স্তর একটি বৈশিষ্ট্য হিসেবে যোগ করার জন্য প্রয়োজন
logging
দৃঢ়তা জন্য নিজেই: logging.TRACE = logging.DEBUG - 5
।
- মডিউলটিতে একটি পদ্ধতি
trace
যুক্ত করা দরকার logging
। এটা ঠিক মত আচরণ করা উচিত debug
, info
ইত্যাদি
trace
বর্তমানে কনফিগার করা লগার শ্রেণিতে একটি পদ্ধতি যুক্ত করা দরকার। যেহেতু এটি 100% গ্যারান্টিযুক্ত নয় logging.Logger
, logging.getLoggerClass()
পরিবর্তে ব্যবহার করুন।
সমস্ত পদক্ষেপ নীচের পদ্ধতিতে চিত্রিত:
def addLoggingLevel(levelName, levelNum, methodName=None):
"""
Comprehensively adds a new logging level to the `logging` module and the
currently configured logging class.
`levelName` becomes an attribute of the `logging` module with the value
`levelNum`. `methodName` becomes a convenience method for both `logging`
itself and the class returned by `logging.getLoggerClass()` (usually just
`logging.Logger`). If `methodName` is not specified, `levelName.lower()` is
used.
To avoid accidental clobberings of existing attributes, this method will
raise an `AttributeError` if the level name is already an attribute of the
`logging` module or if the method name is already present
Example
-------
>>> addLoggingLevel('TRACE', logging.DEBUG - 5)
>>> logging.getLogger(__name__).setLevel("TRACE")
>>> logging.getLogger(__name__).trace('that worked')
>>> logging.trace('so did this')
>>> logging.TRACE
5
"""
if not methodName:
methodName = levelName.lower()
if hasattr(logging, levelName):
raise AttributeError('{} already defined in logging module'.format(levelName))
if hasattr(logging, methodName):
raise AttributeError('{} already defined in logging module'.format(methodName))
if hasattr(logging.getLoggerClass(), methodName):
raise AttributeError('{} already defined in logger class'.format(methodName))
# This method was inspired by the answers to Stack Overflow post
# http://stackoverflow.com/q/2183233/2988730, especially
# http://stackoverflow.com/a/13638084/2988730
def logForLevel(self, message, *args, **kwargs):
if self.isEnabledFor(levelNum):
self._log(levelNum, message, args, **kwargs)
def logToRoot(message, *args, **kwargs):
logging.log(levelNum, message, *args, **kwargs)
logging.addLevelName(levelNum, levelName)
setattr(logging, levelName, levelNum)
setattr(logging.getLoggerClass(), methodName, logForLevel)
setattr(logging, methodName, logToRoot)