Mevcut tüm yanıtları bir dizi kullanım deneyimi ile birleştirerek, yeni seviyenin tamamen sorunsuz bir şekilde kullanılmasını sağlamak için yapılması gereken her şeyin bir listesini çıkardığımı düşünüyorum. Aşağıdaki adımlar TRACE, değerli yeni bir seviye eklediğinizi varsayar logging.DEBUG - 5 == 5:
logging.addLevelName(logging.DEBUG - 5, 'TRACE') yeni seviyenin isme göre referans alınabilmesi için dahili olarak kaydedilmesi için çağrılması gerekir.
- Yeni seviye bir özellik olarak eklenmesi gerekir
loggingtutarlılığı için kendisi: logging.TRACE = logging.DEBUG - 5.
- Modüle çağrılan bir yöntemin
traceeklenmesi gerekiyor logging. Sadece gibi davranması gerektiği debug, infovb
traceŞu anda yapılandırılmış olan günlükçü sınıfına çağrılan bir yöntemin eklenmesi gerekir. Bunun% 100 olması garanti edilmediğinden logging.Logger, logging.getLoggerClass()bunun yerine kullanın.
Tüm adımlar aşağıdaki yöntemde gösterilmektedir:
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)