Merge lp:~mordred/python-fixtures/agressive-loggers into lp:~python-fixtures/python-fixtures/trunk

Proposed by Monty Taylor
Status: Needs review
Proposed branch: lp:~mordred/python-fixtures/agressive-loggers
Merge into: lp:~python-fixtures/python-fixtures/trunk
Diff against target: 48 lines (+18/-9)
1 file modified
lib/fixtures/_fixtures/logger.py (+18/-9)
To merge this branch: bzr merge lp:~mordred/python-fixtures/agressive-loggers
Reviewer Review Type Date Requested Status
python-fixtures committers Pending
Review via email: mp+150237@code.launchpad.net

Description of the change

In the case where Logger is instantiated with no arguments, what we want is to grab ALL of the logging that's out there. To that end, iterate through the loggerDict and take over anything that's found there too.

The idea came from the nosetests logcapture plugin after noticing that nose was capturing things that the logger fixture was not.

To post a comment you must log in.
Revision history for this message
Robert Collins (lifeless) wrote :

Could we please get a test that this saves/restores properly?

Also loggers are hierarchical, so we should be able to just replace
everything with a single logger.

Revision history for this message
Robert Collins (lifeless) wrote :

ping :)

Unmerged revisions

69. By Monty Taylor

Added missing import.

68. By Monty Taylor

Expand logic for handling the "grab everything" case.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/fixtures/_fixtures/logger.py'
2--- lib/fixtures/_fixtures/logger.py 2012-12-16 12:18:12 +0000
3+++ lib/fixtures/_fixtures/logger.py 2013-02-24 18:58:23 +0000
4@@ -13,7 +13,7 @@
5 # license you chose for the specific language governing permissions and
6 # limitations under that license.
7
8-from logging import StreamHandler, getLogger, INFO, Formatter
9+from logging import StreamHandler, getLogger, INFO, Formatter, Logger
10
11 from testtools.compat import _u
12
13@@ -48,18 +48,27 @@
14
15 def setUp(self):
16 super(LogHandler, self).setUp()
17- logger = getLogger(self._name)
18+ if self._name:
19+ root_logger = getLogger(self._name)
20+ else:
21+ root_logger = getLogger()
22 if self._level:
23- self.addCleanup(logger.setLevel, logger.level)
24- logger.setLevel(self._level)
25+ self.addCleanup(root_logger.setLevel, root_logger.level)
26+ root_logger.setLevel(self._level)
27 if self._nuke_handlers:
28- for handler in reversed(logger.handlers):
29- self.addCleanup(logger.addHandler, handler)
30- logger.removeHandler(handler)
31+ for handler in reversed(root_logger.handlers):
32+ self.addCleanup(root_logger.addHandler, handler)
33+ root_logger.removeHandler(handler)
34+ if not self._name:
35+ for logger in Logger.manager.loggerDict.values():
36+ if hasattr(logger, "handlers"):
37+ for handler in logger.handlers:
38+ self.addCleanup(logger.addHandler, handler)
39+ logger.removeHandler(handler)
40 try:
41- logger.addHandler(self.handler)
42+ root_logger.addHandler(self.handler)
43 finally:
44- self.addCleanup(logger.removeHandler, self.handler)
45+ self.addCleanup(root_logger.removeHandler, self.handler)
46
47
48 class FakeLogger(Fixture):

Subscribers

People subscribed via source and target branches