( ):
, , . , , , , , , , . , , , , , / , .
:

, :
logging -module, _levelToName _nameToLevel . , , addLevelName() .
, MESSAGE, 25:
import logging
MESSAGE = 25
logging.addLevelName(MESSAGE, 'MESSAGE')
assert logging.getLevelName(MESSAGE) == 'MESSAGE'
, , Logger.log(level, msg) -method :
logging.log(MESSAGE, 'This is a message')
:
def message(self, msg, *args, **kwargs):
if self.isEnabledFor(MESSAGE):
self._log(MESSAGE, msg, args, **kwargs)
message() -function logging:
logging.message = message
# or setattr(logging, 'message', message)
message() -function :
logging.Logger.message = message
# or setattr(logging.Logger, 'message', message)
Logger
message(msg) -method, (, info(msg), warning(msg) ..)
message(msg) -method MESSAGE:
class MyLogger(logging.Logger):
def message(self, msg, *args, **kwargs):
if self.isEnabledFor(MESSAGE):
self._log(MESSAGE, msg, args, **kwargs)
, logging.getLogger(name), . , :
, MyLogger logging.Logger :
logging.setLoggerClass(MyLogger)
logger = logging.getLogger('A new logger name')
logger.message('This seems to work')
assert isInstance(logger, MyLogger)
logger loggerDict logging.Manager (EDIT: , . ):
my_logger = MyLogger('Foo')
logging.Logger.manager.loggerDict['Foo'] = my_logger
logger = logging.getLogger('Foo')
logger.message('This is the same instance as my_logger')
assert logger is my_logger
logger.warning('Custom log levels might be a bad idea')
logger.message('Here is a message')
logger.log(MESSAGE, 'This is a message')
, MESSAGE , . (, 25, )