MMLogger¶
- class mmengine.logging.MMLogger(name, logger_name='mmengine', log_file=None, log_level='INFO', file_mode='w', distributed=False, file_handler_cfg=None)[source]¶
Formatted logger used to record messages.
MMLoggercan create formatted logger to log message with different log levels and get instance in the same way asManagerMixin.MMLoggerhas the following features:Distributed log storage,
MMLoggercan 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_nameofMMLoggercould be different. We can only getMMLoggerinstance byMMLogger.get_instancebut notlogging.getLogger. This feature ensuresMMLoggerwill not be incluenced by third-party logging config.Different from
logging.Logger,MMLoggerwill 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) –
nameattribute ofLogging.Loggerinstance. If logger_name is not defined, defaults to ‘mmengine’.log_file (str, optional) – The log filename. If specified, a
FileHandlerwill be added to the logger. Defaults to None.log_level (str) – The log level of the handler. Defaults to ‘INFO’. If log level is ‘DEBUG’, distributed logs will be saved during distributed training.
file_mode (str) – The file mode used to open log file. Defaults to ‘w’.
distributed (bool) – Whether to save distributed logs, Defaults to false.
file_handler_cfg (dict, optional) –
Configuration of file handler. Defaults to None. If
file_handler_cfgis not specified,logging.FileHandlerwill be used by default. If it is specified, thetypekey should be set. It can beRotatingFileHandler,TimedRotatingFileHandler,WatchedFileHandleror other file handlers, and the remaining fields will be used to build the handler.Examples
>>> file_handler_cfg = dict( >>> type='TimedRotatingFileHandler', >>> when='MIDNIGHT', >>> interval=1, >>> backupCount=365)
New in version 0.9.0.
- callHandlers(record)[source]¶
Pass a record to all relevant handlers.
Override
callHandlersmethod inlogging.Loggerto 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
LogRecordinstance contains logged message.- Return type:
None
- classmethod get_current_instance()[source]¶
Get latest created
MMLoggerinstance.MMLoggercan 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.selLevelis called, alllogging.Loggerinstances managed bylogging.Managerwill clear the cache. SinceMMLoggeris not managed bylogging.Manageranymore,MMLoggershould override this method to clear caches of allMMLoggerinstance which is managed byManagerMixin.level must be an int or a str.