Skip to content
Snippets Groups Projects
Unverified Commit 7d3224bf authored by Mashiro's avatar Mashiro Committed by GitHub
Browse files

[Fix] Fix setLevel of MMLogger (#297)

* Fix setLevel of MMLogger

Fix setLevel of MMLogger

* add docstring and comment
parent 1c18f308
No related branches found
No related tags found
No related merge requests found
...@@ -9,6 +9,7 @@ from termcolor import colored ...@@ -9,6 +9,7 @@ from termcolor import colored
from mmengine import dist from mmengine import dist
from mmengine.utils import ManagerMixin from mmengine.utils import ManagerMixin
from mmengine.utils.manager import _accquire_lock, _release_lock
class MMFormatter(logging.Formatter): class MMFormatter(logging.Formatter):
...@@ -216,6 +217,24 @@ class MMLogger(Logger, ManagerMixin): ...@@ -216,6 +217,24 @@ class MMLogger(Logger, ManagerMixin):
if record.levelno >= handler.level: if record.levelno >= handler.level:
handler.handle(record) handler.handle(record)
def setLevel(self, level):
"""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 :obj:`ManagerMixin`.
level must be an int or a str.
"""
self.level = logging._checkLevel(level)
_accquire_lock()
# The same logic as `logging.Manager._clear_cache`.
for logger in MMLogger._instance_dict.values():
logger._cache.clear()
_release_lock()
def print_log(msg, def print_log(msg,
logger: Optional[Union[Logger, str]] = None, logger: Optional[Union[Logger, str]] = None,
......
...@@ -159,3 +159,16 @@ class TestLogger: ...@@ -159,3 +159,16 @@ class TestLogger:
# Test original `get_current_instance` function. # Test original `get_current_instance` function.
MMLogger.get_instance('mmdet') MMLogger.get_instance('mmdet')
assert MMLogger.get_current_instance().instance_name == 'mmdet' assert MMLogger.get_current_instance().instance_name == 'mmdet'
def test_set_level(self, capsys):
logger = MMLogger.get_instance('test_set_level')
logger.info('hello')
out, _ = capsys.readouterr()
assert 'INFO' in out
logger.setLevel('WARNING')
logger.info('hello')
out, _ = capsys.readouterr()
assert not out
logger.warning('hello')
out, _ = capsys.readouterr()
assert 'WARNING' in out
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment