Éric Araujo <merwok <at> netwok.org> writes: > The code is on https://bitbucket.org/tarek/cpython, in Lib/packaging.
The cases you refer to seem to be _set_logger in packaging/run.py (which appears not to be used at all - there appear to be no other references to it in the code), Dispatcher.__init__ in packaging/run.py and Distribution.parse_command_line in packaging/dist.py. I can't see why the first case is there. In the second and third cases, can you be sure that only one of these code paths will be executed, at most once? If not, multiple StreamHandler instances would be added to the logger, resulting in duplicated messages. If the code paths will be executed at most once, then the code seems to be acceptable. You may wish to add a guard using "if not logger.hasHandlers():" so that even if the code is executed multiple times, a handler isn't added multiple times. In the case of the test support code, I'm not really sure that LoggingCatcher is needed. There is already a TestHandler class in test.support which captures records in a buffer, and allows flexible matching for assertions, as described in http://plumberjack.blogspot.com/2010/09/unit-testing-and-logging.html The _handlerList in logging contains weak references to handlers, and when the referent is finalised, it's removed from the list. If you want to control this more finely, you could do something like (untested): class MyTestCase(unittest.TestCase): def setUp(self): self.handler = TestHandler(Matcher()) logging.getLogger().addHandler(self.handler) def tearDown(self): logging.getLogger().removeHandler(self.handler) self.handler.close() refs = weakref.getweakrefs(self.handler) for ref in refs: logging._removeHandlerRef(ref) def test_something(self): logging.warning('Test') self.assertTrue(self.handler.matches(message='Test')) Regards, Vinay Sajip _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com