class mmengine.logging.MMLogger(name, logger_name='mmengine', log_file=None, log_level='INFO', file_mode='w', distributed=False)[source]

Formatted logger used to record messages.

MMLogger can create formatted logger to log message with different log levels and get instance in the same way as ManagerMixin. MMLogger has the following features:

  • Distributed log storage, MMLogger can choose whether to save log of different ranks according to log_file.

  • Message with different log levels will have different colors and format when displayed on terminal.


  • The name of logger and the instance_name of MMLogger could be different. We can only get MMLogger instance by MMLogger.get_instance but not logging.getLogger. This feature ensures MMLogger will not be incluenced by third-party logging config.

  • Different from logging.Logger, MMLogger will not log warning or error message without Handler.


>>> logger = MMLogger.get_instance(name='MMLogger',
>>>                                logger_name='Logger')
>>> # Although logger has name attribute just like `logging.Logger`
>>> # We cannot get logger instance by `logging.getLogger`.
>>> assert == 'Logger'
>>> assert logger.instance_name = 'MMLogger'
>>> assert id(logger) != id(logging.getLogger('Logger'))
>>> # Get logger that do not store logs.
>>> logger1 = MMLogger.get_instance('logger1')
>>> # Get logger only save rank0 logs.
>>> logger2 = MMLogger.get_instance('logger2', log_file='out.log')
>>> # Get logger only save multiple ranks logs.
>>> logger3 = MMLogger.get_instance('logger3', log_file='out.log',
>>>                                 distributed=True)
  • name (str) – Global instance name.

  • logger_name (str) – name attribute of Logging.Logger instance. If logger_name is not defined, defaults to ‘mmengine’.

  • log_file (str, optional) – The log filename. If specified, a FileHandler will be added to the logger. Defaults to None.

  • log_level (str) – The log level of the handler and logger. Defaults to “NOTSET”.

  • file_mode (str) – The file mode used to open log file. Defaults to ‘w’.

  • distributed (bool) – Whether to save distributed logs, Defaults to false.


Pass a record to all relevant handlers.

Override callHandlers method in logging.Logger to avoid multiple warning messages in DDP mode. Loop through all handlers of the logger instance and its parents in the logger hierarchy. If no handler was found, the record will not be output.


record (LogRecord) – A LogRecord instance contains logged message.

Return type


classmethod get_current_instance()[source]

Get latest created MMLogger instance.

MMLogger can call get_current_instance() before any instance has been created, and return a logger with the instance name “mmengine”.


Configured logger instance.

Return type



Set the logging level of this logger.

If logging.Logger.selLevel is called, all logging.Logger instances managed by logging.Manager will clear the cache. Since MMLogger is not managed by logging.Manager anymore, MMLogger should override this method to clear caches of all MMLogger instance which is managed by ManagerMixin.

level must be an int or a str.

Read the Docs v: v0.2.0
On Read the Docs
Project Home

Free document hosting provided by Read the Docs.