MMLogger¶
- 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 asManagerMixin
.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.
Note
The name of logger and the
instance_name
ofMMLogger
could be different. We can only getMMLogger
instance byMMLogger.get_instance
but notlogging.getLogger
. This feature ensuresMMLogger
will not be incluenced by third-party logging config.Different from
logging.Logger
,MMLogger
will not log warning or error message withoutHandler
.
Examples
>>> 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.name == '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)
- Parameters
name (str) – Global instance name.
logger_name (str) –
name
attribute ofLogging.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.
- callHandlers(record)[source]¶
Pass a record to all relevant handlers.
Override
callHandlers
method inlogging.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.- Parameters
record (LogRecord) – A
LogRecord
instance contains logged message.- Return type
- classmethod get_current_instance()[source]¶
Get latest created
MMLogger
instance.MMLogger
can callget_current_instance()
before any instance has been created, and return a logger with the instance name “mmengine”.- Returns
Configured logger instance.
- Return type
- setLevel(level)[source]¶
Set the logging level of this logger.
If
logging.Logger.selLevel
is called, alllogging.Logger
instances managed bylogging.Manager
will clear the cache. SinceMMLogger
is not managed bylogging.Manager
anymore,MMLogger
should override this method to clear caches of allMMLogger
instance which is managed byManagerMixin
.level must be an int or a str.