Michele Simionato schrieb: > I have just discovered a bug in my code using the logging module, due > to > handlers not being closed properly. The issue was that I called the > function > removeHandler and I assumed that it took care of closing the handler, > but it did not. > Looking at the source code of logging/__init__.py I discovered that it > is > implemented as follows: > > def removeHandler(self, hdlr): > """ > Remove the specified handler from this logger. > """ > if hdlr in self.handlers: > #hdlr.close() > hdlr.acquire() > try: > self.handlers.remove(hdlr) > finally: > hdlr.release() > > The question is: why in the hell the "hdlr.close()" line is > commented?? > I discovered this because we had locks in our production database > (we were logging on the DB) and it was not easy to spot the source of > the problem, so I would like to know the rationale for not closing > the handler in removeHandler.
I can only guess - but I'd say if you can do foo.removeHandler(h) you can do foo.removeHandler(h) h.close() easily. But not foo.removeHandler(h) # implicit closing bar.addHandler(h) It does kind of make sense if you decouple the life-cycles IMHO. Diez -- http://mail.python.org/mailman/listinfo/python-list