| #!/usr/bin/env python |
| """ |
| Test 0 |
| ====== |
| |
| Some preliminaries: |
| >>> import sys |
| >>> import logging |
| >>> def nextmessage(): |
| ... global msgcount |
| ... rv = "Message %d" % msgcount |
| ... msgcount = msgcount + 1 |
| ... return rv |
| |
| Set a few variables, then go through the logger autoconfig and set the default threshold. |
| >>> msgcount = 0 |
| >>> FINISH_UP = "Finish up, it's closing time. Messages should bear numbers 0 through 24." |
| >>> logging.basicConfig(stream=sys.stdout) |
| >>> rootLogger = logging.getLogger("") |
| >>> rootLogger.setLevel(logging.DEBUG) |
| |
| Now, create a bunch of loggers, and set their thresholds. |
| >>> ERR = logging.getLogger("ERR0") |
| >>> ERR.setLevel(logging.ERROR) |
| >>> INF = logging.getLogger("INFO0") |
| >>> INF.setLevel(logging.INFO) |
| >>> INF_ERR = logging.getLogger("INFO0.ERR") |
| >>> INF_ERR.setLevel(logging.ERROR) |
| >>> DEB = logging.getLogger("DEB0") |
| >>> DEB.setLevel(logging.DEBUG) |
| >>> INF_UNDEF = logging.getLogger("INFO0.UNDEF") |
| >>> INF_ERR_UNDEF = logging.getLogger("INFO0.ERR.UNDEF") |
| >>> UNDEF = logging.getLogger("UNDEF0") |
| >>> GRANDCHILD = logging.getLogger("INFO0.BADPARENT.UNDEF") |
| >>> CHILD = logging.getLogger("INFO0.BADPARENT") |
| |
| |
| And finally, run all the tests. |
| |
| >>> ERR.log(logging.FATAL, nextmessage()) |
| CRITICAL:ERR0:Message 0 |
| |
| >>> ERR.error(nextmessage()) |
| ERROR:ERR0:Message 1 |
| |
| >>> INF.log(logging.FATAL, nextmessage()) |
| CRITICAL:INFO0:Message 2 |
| |
| >>> INF.error(nextmessage()) |
| ERROR:INFO0:Message 3 |
| |
| >>> INF.warn(nextmessage()) |
| WARNING:INFO0:Message 4 |
| |
| >>> INF.info(nextmessage()) |
| INFO:INFO0:Message 5 |
| |
| >>> INF_UNDEF.log(logging.FATAL, nextmessage()) |
| CRITICAL:INFO0.UNDEF:Message 6 |
| |
| >>> INF_UNDEF.error(nextmessage()) |
| ERROR:INFO0.UNDEF:Message 7 |
| |
| >>> INF_UNDEF.warn (nextmessage()) |
| WARNING:INFO0.UNDEF:Message 8 |
| |
| >>> INF_UNDEF.info (nextmessage()) |
| INFO:INFO0.UNDEF:Message 9 |
| |
| >>> INF_ERR.log(logging.FATAL, nextmessage()) |
| CRITICAL:INFO0.ERR:Message 10 |
| |
| >>> INF_ERR.error(nextmessage()) |
| ERROR:INFO0.ERR:Message 11 |
| |
| >>> INF_ERR_UNDEF.log(logging.FATAL, nextmessage()) |
| CRITICAL:INFO0.ERR.UNDEF:Message 12 |
| |
| >>> INF_ERR_UNDEF.error(nextmessage()) |
| ERROR:INFO0.ERR.UNDEF:Message 13 |
| |
| >>> DEB.log(logging.FATAL, nextmessage()) |
| CRITICAL:DEB0:Message 14 |
| |
| >>> DEB.error(nextmessage()) |
| ERROR:DEB0:Message 15 |
| |
| >>> DEB.warn (nextmessage()) |
| WARNING:DEB0:Message 16 |
| |
| >>> DEB.info (nextmessage()) |
| INFO:DEB0:Message 17 |
| |
| >>> DEB.debug(nextmessage()) |
| DEBUG:DEB0:Message 18 |
| |
| >>> UNDEF.log(logging.FATAL, nextmessage()) |
| CRITICAL:UNDEF0:Message 19 |
| |
| >>> UNDEF.error(nextmessage()) |
| ERROR:UNDEF0:Message 20 |
| |
| >>> UNDEF.warn (nextmessage()) |
| WARNING:UNDEF0:Message 21 |
| |
| >>> UNDEF.info (nextmessage()) |
| INFO:UNDEF0:Message 22 |
| |
| >>> GRANDCHILD.log(logging.FATAL, nextmessage()) |
| CRITICAL:INFO0.BADPARENT.UNDEF:Message 23 |
| |
| >>> CHILD.log(logging.FATAL, nextmessage()) |
| CRITICAL:INFO0.BADPARENT:Message 24 |
| |
| These should not log: |
| |
| >>> ERR.warn(nextmessage()) |
| |
| >>> ERR.info(nextmessage()) |
| |
| >>> ERR.debug(nextmessage()) |
| |
| >>> INF.debug(nextmessage()) |
| |
| >>> INF_UNDEF.debug(nextmessage()) |
| |
| >>> INF_ERR.warn(nextmessage()) |
| |
| >>> INF_ERR.info(nextmessage()) |
| |
| >>> INF_ERR.debug(nextmessage()) |
| |
| >>> INF_ERR_UNDEF.warn(nextmessage()) |
| |
| >>> INF_ERR_UNDEF.info(nextmessage()) |
| |
| >>> INF_ERR_UNDEF.debug(nextmessage()) |
| |
| >>> INF.info(FINISH_UP) |
| INFO:INFO0:Finish up, it's closing time. Messages should bear numbers 0 through 24. |
| |
| Test 1 |
| ====== |
| |
| >>> import sys, logging |
| >>> logging.basicConfig(stream=sys.stdout) |
| |
| First, we define our levels. There can be as many as you want - the only |
| limitations are that they should be integers, the lowest should be > 0 and |
| larger values mean less information being logged. If you need specific |
| level values which do not fit into these limitations, you can use a |
| mapping dictionary to convert between your application levels and the |
| logging system. |
| |
| >>> SILENT = 10 |
| >>> TACITURN = 9 |
| >>> TERSE = 8 |
| >>> EFFUSIVE = 7 |
| >>> SOCIABLE = 6 |
| >>> VERBOSE = 5 |
| >>> TALKATIVE = 4 |
| >>> GARRULOUS = 3 |
| >>> CHATTERBOX = 2 |
| >>> BORING = 1 |
| >>> LEVEL_RANGE = range(BORING, SILENT + 1) |
| |
| |
| Next, we define names for our levels. You don't need to do this - in which |
| case the system will use "Level n" to denote the text for the level. |
| ' |
| |
| |
| >>> my_logging_levels = { |
| ... SILENT : 'SILENT', |
| ... TACITURN : 'TACITURN', |
| ... TERSE : 'TERSE', |
| ... EFFUSIVE : 'EFFUSIVE', |
| ... SOCIABLE : 'SOCIABLE', |
| ... VERBOSE : 'VERBOSE', |
| ... TALKATIVE : 'TALKATIVE', |
| ... GARRULOUS : 'GARRULOUS', |
| ... CHATTERBOX : 'CHATTERBOX', |
| ... BORING : 'BORING', |
| ... } |
| |
| |
| Now, to demonstrate filtering: suppose for some perverse reason we only |
| want to print out all except GARRULOUS messages. We create a filter for |
| this purpose... |
| |
| >>> class SpecificLevelFilter(logging.Filter): |
| ... def __init__(self, lvl): |
| ... self.level = lvl |
| ... |
| ... def filter(self, record): |
| ... return self.level != record.levelno |
| |
| >>> class GarrulousFilter(SpecificLevelFilter): |
| ... def __init__(self): |
| ... SpecificLevelFilter.__init__(self, GARRULOUS) |
| |
| |
| Now, demonstrate filtering at the logger. This time, use a filter |
| which excludes SOCIABLE and TACITURN messages. Note that GARRULOUS events |
| are still excluded. |
| |
| |
| >>> class VerySpecificFilter(logging.Filter): |
| ... def filter(self, record): |
| ... return record.levelno not in [SOCIABLE, TACITURN] |
| |
| >>> SHOULD1 = "This should only be seen at the '%s' logging level (or lower)" |
| |
| Configure the logger, and tell the logging system to associate names with our levels. |
| >>> logging.basicConfig(stream=sys.stdout) |
| >>> rootLogger = logging.getLogger("") |
| >>> rootLogger.setLevel(logging.DEBUG) |
| >>> for lvl in my_logging_levels.keys(): |
| ... logging.addLevelName(lvl, my_logging_levels[lvl]) |
| >>> log = logging.getLogger("") |
| >>> hdlr = log.handlers[0] |
| >>> from test_logging import message |
| |
| Set the logging level to each different value and call the utility |
| function to log events. In the output, you should see that each time |
| round the loop, the number of logging events which are actually output |
| decreases. |
| |
| >>> log.setLevel(1) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| BORING:root:This should only be seen at the '1' logging level (or lower) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| CHATTERBOX:root:This should only be seen at the '2' logging level (or lower) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| GARRULOUS:root:This should only be seen at the '3' logging level (or lower) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(2) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| CHATTERBOX:root:This should only be seen at the '2' logging level (or lower) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| GARRULOUS:root:This should only be seen at the '3' logging level (or lower) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(3) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| GARRULOUS:root:This should only be seen at the '3' logging level (or lower) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(4) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(5) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| |
| >>> log.setLevel(6) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(7) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(8) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(9) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(10) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> hdlr.setLevel(SOCIABLE) |
| |
| >>> log.setLevel(1) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(2) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(3) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(4) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(5) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(6) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(7) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(8) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(9) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(10) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> |
| |
| >>> hdlr.setLevel(0) |
| |
| >>> garr = GarrulousFilter() |
| |
| >>> hdlr.addFilter(garr) |
| |
| >>> log.setLevel(1) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| BORING:root:This should only be seen at the '1' logging level (or lower) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| CHATTERBOX:root:This should only be seen at the '2' logging level (or lower) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(2) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| CHATTERBOX:root:This should only be seen at the '2' logging level (or lower) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(3) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(4) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(5) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.setLevel(6) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| SOCIABLE:root:This should only be seen at the '6' logging level (or lower) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(7) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(8) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(9) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| TACITURN:root:This should only be seen at the '9' logging level (or lower) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(10) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> spec = VerySpecificFilter() |
| |
| >>> log.addFilter(spec) |
| |
| >>> log.setLevel(1) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| BORING:root:This should only be seen at the '1' logging level (or lower) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| CHATTERBOX:root:This should only be seen at the '2' logging level (or lower) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(2) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| CHATTERBOX:root:This should only be seen at the '2' logging level (or lower) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(3) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(4) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| TALKATIVE:root:This should only be seen at the '4' logging level (or lower) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(5) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| VERBOSE:root:This should only be seen at the '5' logging level (or lower) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(6) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(7) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| EFFUSIVE:root:This should only be seen at the '7' logging level (or lower) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(8) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| TERSE:root:This should only be seen at the '8' logging level (or lower) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(9) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(10) |
| |
| >>> log.log(1, "This should only be seen at the '%s' logging level (or lower)", BORING) |
| |
| >>> log.log(2, "This should only be seen at the '%s' logging level (or lower)", CHATTERBOX) |
| |
| >>> log.log(3, "This should only be seen at the '%s' logging level (or lower)", GARRULOUS) |
| |
| >>> log.log(4, "This should only be seen at the '%s' logging level (or lower)", TALKATIVE) |
| |
| >>> log.log(5, "This should only be seen at the '%s' logging level (or lower)", VERBOSE) |
| |
| >>> log.log(6, "This should only be seen at the '%s' logging level (or lower)", SOCIABLE) |
| |
| >>> log.log(7, "This should only be seen at the '%s' logging level (or lower)", EFFUSIVE) |
| |
| >>> log.log(8, "This should only be seen at the '%s' logging level (or lower)", TERSE) |
| |
| >>> log.log(9, "This should only be seen at the '%s' logging level (or lower)", TACITURN) |
| |
| >>> log.log(10, "This should only be seen at the '%s' logging level (or lower)", SILENT) |
| SILENT:root:This should only be seen at the '10' logging level (or lower) |
| |
| >>> log.setLevel(0) |
| |
| >>> log.removeFilter(spec) |
| |
| >>> hdlr.removeFilter(garr) |
| |
| >>> logging.addLevelName(logging.DEBUG, "DEBUG") |
| |
| |
| Test 2 |
| ====== |
| Test memory handlers. These are basically buffers for log messages: they take so many messages, and then print them all. |
| |
| >>> import logging.handlers |
| |
| >>> sys.stderr = sys.stdout |
| >>> logger = logging.getLogger("") |
| >>> sh = logger.handlers[0] |
| >>> sh.close() |
| >>> logger.removeHandler(sh) |
| >>> mh = logging.handlers.MemoryHandler(10,logging.WARNING, sh) |
| >>> logger.setLevel(logging.DEBUG) |
| >>> logger.addHandler(mh) |
| |
| >>> logger.debug("Debug message") |
| |
| -- logging at INFO, nothing should be seen yet -- |
| |
| >>> logger.info("Info message") |
| |
| -- logging at WARNING, 3 messages should be seen -- |
| |
| >>> logger.warn("Warn message") |
| DEBUG:root:Debug message |
| INFO:root:Info message |
| WARNING:root:Warn message |
| |
| >>> logger.info("Info index = 0") |
| |
| >>> logger.info("Info index = 1") |
| |
| >>> logger.info("Info index = 2") |
| |
| >>> logger.info("Info index = 3") |
| |
| >>> logger.info("Info index = 4") |
| |
| >>> logger.info("Info index = 5") |
| |
| >>> logger.info("Info index = 6") |
| |
| >>> logger.info("Info index = 7") |
| |
| >>> logger.info("Info index = 8") |
| |
| >>> logger.info("Info index = 9") |
| INFO:root:Info index = 0 |
| INFO:root:Info index = 1 |
| INFO:root:Info index = 2 |
| INFO:root:Info index = 3 |
| INFO:root:Info index = 4 |
| INFO:root:Info index = 5 |
| INFO:root:Info index = 6 |
| INFO:root:Info index = 7 |
| INFO:root:Info index = 8 |
| INFO:root:Info index = 9 |
| |
| >>> logger.info("Info index = 10") |
| |
| >>> logger.info("Info index = 11") |
| |
| >>> logger.info("Info index = 12") |
| |
| >>> logger.info("Info index = 13") |
| |
| >>> logger.info("Info index = 14") |
| |
| >>> logger.info("Info index = 15") |
| |
| >>> logger.info("Info index = 16") |
| |
| >>> logger.info("Info index = 17") |
| |
| >>> logger.info("Info index = 18") |
| |
| >>> logger.info("Info index = 19") |
| INFO:root:Info index = 10 |
| INFO:root:Info index = 11 |
| INFO:root:Info index = 12 |
| INFO:root:Info index = 13 |
| INFO:root:Info index = 14 |
| INFO:root:Info index = 15 |
| INFO:root:Info index = 16 |
| INFO:root:Info index = 17 |
| INFO:root:Info index = 18 |
| INFO:root:Info index = 19 |
| |
| >>> logger.info("Info index = 20") |
| |
| >>> logger.info("Info index = 21") |
| |
| >>> logger.info("Info index = 22") |
| |
| >>> logger.info("Info index = 23") |
| |
| >>> logger.info("Info index = 24") |
| |
| >>> logger.info("Info index = 25") |
| |
| >>> logger.info("Info index = 26") |
| |
| >>> logger.info("Info index = 27") |
| |
| >>> logger.info("Info index = 28") |
| |
| >>> logger.info("Info index = 29") |
| INFO:root:Info index = 20 |
| INFO:root:Info index = 21 |
| INFO:root:Info index = 22 |
| INFO:root:Info index = 23 |
| INFO:root:Info index = 24 |
| INFO:root:Info index = 25 |
| INFO:root:Info index = 26 |
| INFO:root:Info index = 27 |
| INFO:root:Info index = 28 |
| INFO:root:Info index = 29 |
| |
| >>> logger.info("Info index = 30") |
| |
| >>> logger.info("Info index = 31") |
| |
| >>> logger.info("Info index = 32") |
| |
| >>> logger.info("Info index = 33") |
| |
| >>> logger.info("Info index = 34") |
| |
| >>> logger.info("Info index = 35") |
| |
| >>> logger.info("Info index = 36") |
| |
| >>> logger.info("Info index = 37") |
| |
| >>> logger.info("Info index = 38") |
| |
| >>> logger.info("Info index = 39") |
| INFO:root:Info index = 30 |
| INFO:root:Info index = 31 |
| INFO:root:Info index = 32 |
| INFO:root:Info index = 33 |
| INFO:root:Info index = 34 |
| INFO:root:Info index = 35 |
| INFO:root:Info index = 36 |
| INFO:root:Info index = 37 |
| INFO:root:Info index = 38 |
| INFO:root:Info index = 39 |
| |
| >>> logger.info("Info index = 40") |
| |
| >>> logger.info("Info index = 41") |
| |
| >>> logger.info("Info index = 42") |
| |
| >>> logger.info("Info index = 43") |
| |
| >>> logger.info("Info index = 44") |
| |
| >>> logger.info("Info index = 45") |
| |
| >>> logger.info("Info index = 46") |
| |
| >>> logger.info("Info index = 47") |
| |
| >>> logger.info("Info index = 48") |
| |
| >>> logger.info("Info index = 49") |
| INFO:root:Info index = 40 |
| INFO:root:Info index = 41 |
| INFO:root:Info index = 42 |
| INFO:root:Info index = 43 |
| INFO:root:Info index = 44 |
| INFO:root:Info index = 45 |
| INFO:root:Info index = 46 |
| INFO:root:Info index = 47 |
| INFO:root:Info index = 48 |
| INFO:root:Info index = 49 |
| |
| >>> logger.info("Info index = 50") |
| |
| >>> logger.info("Info index = 51") |
| |
| >>> logger.info("Info index = 52") |
| |
| >>> logger.info("Info index = 53") |
| |
| >>> logger.info("Info index = 54") |
| |
| >>> logger.info("Info index = 55") |
| |
| >>> logger.info("Info index = 56") |
| |
| >>> logger.info("Info index = 57") |
| |
| >>> logger.info("Info index = 58") |
| |
| >>> logger.info("Info index = 59") |
| INFO:root:Info index = 50 |
| INFO:root:Info index = 51 |
| INFO:root:Info index = 52 |
| INFO:root:Info index = 53 |
| INFO:root:Info index = 54 |
| INFO:root:Info index = 55 |
| INFO:root:Info index = 56 |
| INFO:root:Info index = 57 |
| INFO:root:Info index = 58 |
| INFO:root:Info index = 59 |
| |
| >>> logger.info("Info index = 60") |
| |
| >>> logger.info("Info index = 61") |
| |
| >>> logger.info("Info index = 62") |
| |
| >>> logger.info("Info index = 63") |
| |
| >>> logger.info("Info index = 64") |
| |
| >>> logger.info("Info index = 65") |
| |
| >>> logger.info("Info index = 66") |
| |
| >>> logger.info("Info index = 67") |
| |
| >>> logger.info("Info index = 68") |
| |
| >>> logger.info("Info index = 69") |
| INFO:root:Info index = 60 |
| INFO:root:Info index = 61 |
| INFO:root:Info index = 62 |
| INFO:root:Info index = 63 |
| INFO:root:Info index = 64 |
| INFO:root:Info index = 65 |
| INFO:root:Info index = 66 |
| INFO:root:Info index = 67 |
| INFO:root:Info index = 68 |
| INFO:root:Info index = 69 |
| |
| >>> logger.info("Info index = 70") |
| |
| >>> logger.info("Info index = 71") |
| |
| >>> logger.info("Info index = 72") |
| |
| >>> logger.info("Info index = 73") |
| |
| >>> logger.info("Info index = 74") |
| |
| >>> logger.info("Info index = 75") |
| |
| >>> logger.info("Info index = 76") |
| |
| >>> logger.info("Info index = 77") |
| |
| >>> logger.info("Info index = 78") |
| |
| >>> logger.info("Info index = 79") |
| INFO:root:Info index = 70 |
| INFO:root:Info index = 71 |
| INFO:root:Info index = 72 |
| INFO:root:Info index = 73 |
| INFO:root:Info index = 74 |
| INFO:root:Info index = 75 |
| INFO:root:Info index = 76 |
| INFO:root:Info index = 77 |
| INFO:root:Info index = 78 |
| INFO:root:Info index = 79 |
| |
| >>> logger.info("Info index = 80") |
| |
| >>> logger.info("Info index = 81") |
| |
| >>> logger.info("Info index = 82") |
| |
| >>> logger.info("Info index = 83") |
| |
| >>> logger.info("Info index = 84") |
| |
| >>> logger.info("Info index = 85") |
| |
| >>> logger.info("Info index = 86") |
| |
| >>> logger.info("Info index = 87") |
| |
| >>> logger.info("Info index = 88") |
| |
| >>> logger.info("Info index = 89") |
| INFO:root:Info index = 80 |
| INFO:root:Info index = 81 |
| INFO:root:Info index = 82 |
| INFO:root:Info index = 83 |
| INFO:root:Info index = 84 |
| INFO:root:Info index = 85 |
| INFO:root:Info index = 86 |
| INFO:root:Info index = 87 |
| INFO:root:Info index = 88 |
| INFO:root:Info index = 89 |
| |
| >>> logger.info("Info index = 90") |
| |
| >>> logger.info("Info index = 91") |
| |
| >>> logger.info("Info index = 92") |
| |
| >>> logger.info("Info index = 93") |
| |
| >>> logger.info("Info index = 94") |
| |
| >>> logger.info("Info index = 95") |
| |
| >>> logger.info("Info index = 96") |
| |
| >>> logger.info("Info index = 97") |
| |
| >>> logger.info("Info index = 98") |
| |
| >>> logger.info("Info index = 99") |
| INFO:root:Info index = 90 |
| INFO:root:Info index = 91 |
| INFO:root:Info index = 92 |
| INFO:root:Info index = 93 |
| INFO:root:Info index = 94 |
| INFO:root:Info index = 95 |
| INFO:root:Info index = 96 |
| INFO:root:Info index = 97 |
| INFO:root:Info index = 98 |
| INFO:root:Info index = 99 |
| |
| >>> logger.info("Info index = 100") |
| |
| >>> logger.info("Info index = 101") |
| |
| >>> mh.close() |
| INFO:root:Info index = 100 |
| INFO:root:Info index = 101 |
| |
| >>> logger.removeHandler(mh) |
| >>> logger.addHandler(sh) |
| |
| |
| |
| Test 3 |
| ====== |
| |
| >>> import sys, logging |
| >>> sys.stderr = sys |
| >>> logging.basicConfig() |
| >>> FILTER = "a.b" |
| >>> root = logging.getLogger() |
| >>> root.setLevel(logging.DEBUG) |
| >>> hand = root.handlers[0] |
| |
| >>> logging.getLogger("a").info("Info 1") |
| INFO:a:Info 1 |
| |
| >>> logging.getLogger("a.b").info("Info 2") |
| INFO:a.b:Info 2 |
| |
| >>> logging.getLogger("a.c").info("Info 3") |
| INFO:a.c:Info 3 |
| |
| >>> logging.getLogger("a.b.c").info("Info 4") |
| INFO:a.b.c:Info 4 |
| |
| >>> logging.getLogger("a.b.c.d").info("Info 5") |
| INFO:a.b.c.d:Info 5 |
| |
| >>> logging.getLogger("a.bb.c").info("Info 6") |
| INFO:a.bb.c:Info 6 |
| |
| >>> logging.getLogger("b").info("Info 7") |
| INFO:b:Info 7 |
| |
| >>> logging.getLogger("b.a").info("Info 8") |
| INFO:b.a:Info 8 |
| |
| >>> logging.getLogger("c.a.b").info("Info 9") |
| INFO:c.a.b:Info 9 |
| |
| >>> logging.getLogger("a.bb").info("Info 10") |
| INFO:a.bb:Info 10 |
| |
| Filtered with 'a.b'... |
| |
| >>> filt = logging.Filter(FILTER) |
| |
| >>> hand.addFilter(filt) |
| |
| >>> logging.getLogger("a").info("Info 1") |
| |
| >>> logging.getLogger("a.b").info("Info 2") |
| INFO:a.b:Info 2 |
| |
| >>> logging.getLogger("a.c").info("Info 3") |
| |
| >>> logging.getLogger("a.b.c").info("Info 4") |
| INFO:a.b.c:Info 4 |
| |
| >>> logging.getLogger("a.b.c.d").info("Info 5") |
| INFO:a.b.c.d:Info 5 |
| |
| >>> logging.getLogger("a.bb.c").info("Info 6") |
| |
| >>> logging.getLogger("b").info("Info 7") |
| |
| >>> logging.getLogger("b.a").info("Info 8") |
| |
| >>> logging.getLogger("c.a.b").info("Info 9") |
| |
| >>> logging.getLogger("a.bb").info("Info 10") |
| |
| >>> hand.removeFilter(filt) |
| |
| |
| Test 4 |
| ====== |
| >>> import sys, logging, logging.handlers, string |
| >>> import tempfile, logging.config, os, test.test_support |
| >>> sys.stderr = sys.stdout |
| |
| >>> from test_logging import config0, config1 |
| |
| config2 has a subtle configuration error that should be reported |
| >>> config2 = string.replace(config1, "sys.stdout", "sys.stbout") |
| |
| config3 has a less subtle configuration error |
| >>> config3 = string.replace(config1, "formatter=form1", "formatter=misspelled_name") |
| |
| >>> def test4(conf): |
| ... loggerDict = logging.getLogger().manager.loggerDict |
| ... logging._acquireLock() |
| ... try: |
| ... saved_handlers = logging._handlers.copy() |
| ... saved_handler_list = logging._handlerList[:] |
| ... saved_loggers = loggerDict.copy() |
| ... finally: |
| ... logging._releaseLock() |
| ... try: |
| ... fn = test.test_support.TESTFN |
| ... f = open(fn, "w") |
| ... f.write(conf) |
| ... f.close() |
| ... try: |
| ... logging.config.fileConfig(fn) |
| ... #call again to make sure cleanup is correct |
| ... logging.config.fileConfig(fn) |
| ... except: |
| ... t = sys.exc_info()[0] |
| ... message(str(t)) |
| ... else: |
| ... message('ok.') |
| ... os.remove(fn) |
| ... finally: |
| ... logging._acquireLock() |
| ... try: |
| ... logging._handlers.clear() |
| ... logging._handlers.update(saved_handlers) |
| ... logging._handlerList[:] = saved_handler_list |
| ... loggerDict = logging.getLogger().manager.loggerDict |
| ... loggerDict.clear() |
| ... loggerDict.update(saved_loggers) |
| ... finally: |
| ... logging._releaseLock() |
| |
| >>> test4(config0) |
| ok. |
| |
| >>> test4(config1) |
| ok. |
| |
| >>> test4(config2) |
| <type 'exceptions.AttributeError'> |
| |
| >>> test4(config3) |
| <type 'exceptions.KeyError'> |
| |
| >>> import test_logging |
| >>> test_logging.test5() |
| ERROR:root:just testing |
| <type 'exceptions.KeyError'>... Don't panic! |
| |
| |
| Test Main |
| ========= |
| >>> import select |
| >>> import os, sys, string, struct, types, cPickle, cStringIO |
| >>> import socket, tempfile, threading, time |
| >>> import logging, logging.handlers, logging.config |
| >>> import test_logging |
| |
| >>> test_logging.test_main_inner() |
| ERR -> CRITICAL: Message 0 (via logrecv.tcp.ERR) |
| ERR -> ERROR: Message 1 (via logrecv.tcp.ERR) |
| INF -> CRITICAL: Message 2 (via logrecv.tcp.INF) |
| INF -> ERROR: Message 3 (via logrecv.tcp.INF) |
| INF -> WARNING: Message 4 (via logrecv.tcp.INF) |
| INF -> INFO: Message 5 (via logrecv.tcp.INF) |
| INF.UNDEF -> CRITICAL: Message 6 (via logrecv.tcp.INF.UNDEF) |
| INF.UNDEF -> ERROR: Message 7 (via logrecv.tcp.INF.UNDEF) |
| INF.UNDEF -> WARNING: Message 8 (via logrecv.tcp.INF.UNDEF) |
| INF.UNDEF -> INFO: Message 9 (via logrecv.tcp.INF.UNDEF) |
| INF.ERR -> CRITICAL: Message 10 (via logrecv.tcp.INF.ERR) |
| INF.ERR -> ERROR: Message 11 (via logrecv.tcp.INF.ERR) |
| INF.ERR.UNDEF -> CRITICAL: Message 12 (via logrecv.tcp.INF.ERR.UNDEF) |
| INF.ERR.UNDEF -> ERROR: Message 13 (via logrecv.tcp.INF.ERR.UNDEF) |
| DEB -> CRITICAL: Message 14 (via logrecv.tcp.DEB) |
| DEB -> ERROR: Message 15 (via logrecv.tcp.DEB) |
| DEB -> WARNING: Message 16 (via logrecv.tcp.DEB) |
| DEB -> INFO: Message 17 (via logrecv.tcp.DEB) |
| DEB -> DEBUG: Message 18 (via logrecv.tcp.DEB) |
| UNDEF -> CRITICAL: Message 19 (via logrecv.tcp.UNDEF) |
| UNDEF -> ERROR: Message 20 (via logrecv.tcp.UNDEF) |
| UNDEF -> WARNING: Message 21 (via logrecv.tcp.UNDEF) |
| UNDEF -> INFO: Message 22 (via logrecv.tcp.UNDEF) |
| INF.BADPARENT.UNDEF -> CRITICAL: Message 23 (via logrecv.tcp.INF.BADPARENT.UNDEF) |
| INF.BADPARENT -> CRITICAL: Message 24 (via logrecv.tcp.INF.BADPARENT) |
| INF -> INFO: Finish up, it's closing time. Messages should bear numbers 0 through 24. (via logrecv.tcp.INF) |
| <BLANKLINE> |
| """ |
| import select |
| import os, sys, string, struct, cPickle, cStringIO |
| import socket, threading |
| import logging, logging.handlers, logging.config, test.test_support |
| |
| |
| BANNER = "-- %-10s %-6s ---------------------------------------------------\n" |
| |
| FINISH_UP = "Finish up, it's closing time. Messages should bear numbers 0 through 24." |
| #---------------------------------------------------------------------------- |
| # Test 0 |
| #---------------------------------------------------------------------------- |
| |
| msgcount = 0 |
| |
| def nextmessage(): |
| global msgcount |
| rv = "Message %d" % msgcount |
| msgcount = msgcount + 1 |
| return rv |
| |
| #---------------------------------------------------------------------------- |
| # Log receiver |
| #---------------------------------------------------------------------------- |
| |
| TIMEOUT = 10 |
| |
| from SocketServer import ThreadingTCPServer, StreamRequestHandler |
| |
| class LogRecordStreamHandler(StreamRequestHandler): |
| """ |
| Handler for a streaming logging request. It basically logs the record |
| using whatever logging policy is configured locally. |
| """ |
| |
| def handle(self): |
| """ |
| Handle multiple requests - each expected to be a 4-byte length, |
| followed by the LogRecord in pickle format. Logs the record |
| according to whatever policy is configured locally. |
| """ |
| while 1: |
| try: |
| chunk = self.connection.recv(4) |
| if len(chunk) < 4: |
| break |
| slen = struct.unpack(">L", chunk)[0] |
| chunk = self.connection.recv(slen) |
| while len(chunk) < slen: |
| chunk = chunk + self.connection.recv(slen - len(chunk)) |
| obj = self.unPickle(chunk) |
| record = logging.makeLogRecord(obj) |
| self.handleLogRecord(record) |
| except: |
| raise |
| |
| def unPickle(self, data): |
| return cPickle.loads(data) |
| |
| def handleLogRecord(self, record): |
| logname = "logrecv.tcp." + record.name |
| #If the end-of-messages sentinel is seen, tell the server to terminate |
| if record.msg == FINISH_UP: |
| self.server.abort = 1 |
| record.msg = record.msg + " (via " + logname + ")" |
| logger = logging.getLogger("logrecv") |
| logger.handle(record) |
| |
| # The server sets socketDataProcessed when it's done. |
| socketDataProcessed = threading.Event() |
| #---------------------------------------------------------------------------- |
| # Test 5 |
| #---------------------------------------------------------------------------- |
| |
| test5_config = """ |
| [loggers] |
| keys=root |
| |
| [handlers] |
| keys=hand1 |
| |
| [formatters] |
| keys=form1 |
| |
| [logger_root] |
| level=NOTSET |
| handlers=hand1 |
| |
| [handler_hand1] |
| class=StreamHandler |
| level=NOTSET |
| formatter=form1 |
| args=(sys.stdout,) |
| |
| [formatter_form1] |
| class=test.test_logging.FriendlyFormatter |
| format=%(levelname)s:%(name)s:%(message)s |
| datefmt= |
| """ |
| |
| class FriendlyFormatter (logging.Formatter): |
| def formatException(self, ei): |
| return "%s... Don't panic!" % str(ei[0]) |
| |
| |
| def test5(): |
| loggerDict = logging.getLogger().manager.loggerDict |
| logging._acquireLock() |
| try: |
| saved_handlers = logging._handlers.copy() |
| saved_handler_list = logging._handlerList[:] |
| saved_loggers = loggerDict.copy() |
| finally: |
| logging._releaseLock() |
| try: |
| fn = test.test_support.TESTFN |
| f = open(fn, "w") |
| f.write(test5_config) |
| f.close() |
| logging.config.fileConfig(fn) |
| try: |
| raise KeyError |
| except KeyError: |
| logging.exception("just testing") |
| os.remove(fn) |
| hdlr = logging.getLogger().handlers[0] |
| logging.getLogger().handlers.remove(hdlr) |
| finally: |
| logging._acquireLock() |
| try: |
| logging._handlers.clear() |
| logging._handlers.update(saved_handlers) |
| logging._handlerList[:] = saved_handler_list |
| loggerDict = logging.getLogger().manager.loggerDict |
| loggerDict.clear() |
| loggerDict.update(saved_loggers) |
| finally: |
| logging._releaseLock() |
| |
| |
| class LogRecordSocketReceiver(ThreadingTCPServer): |
| """ |
| A simple-minded TCP socket-based logging receiver suitable for test |
| purposes. |
| """ |
| |
| allow_reuse_address = 1 |
| |
| def __init__(self, host='localhost', |
| port=logging.handlers.DEFAULT_TCP_LOGGING_PORT, |
| handler=LogRecordStreamHandler): |
| ThreadingTCPServer.__init__(self, (host, port), handler) |
| self.abort = False |
| self.timeout = 1 |
| |
| def serve_until_stopped(self): |
| while not self.abort: |
| rd, wr, ex = select.select([self.socket.fileno()], [], [], |
| self.timeout) |
| if rd: |
| self.handle_request() |
| socketDataProcessed.set() |
| # close the listen socket |
| self.server_close() |
| |
| def process_request(self, request, client_address): |
| t = threading.Thread(target = self.finish_request, |
| args = (request, client_address)) |
| t.start() |
| |
| def runTCP(tcpserver): |
| tcpserver.serve_until_stopped() |
| |
| def banner(nm, typ): |
| sep = BANNER % (nm, typ) |
| sys.stdout.write(sep) |
| sys.stdout.flush() |
| |
| def test0(): |
| ERR = logging.getLogger("ERR") |
| ERR.setLevel(logging.ERROR) |
| INF = logging.getLogger("INF") |
| INF.setLevel(logging.INFO) |
| INF_ERR = logging.getLogger("INF.ERR") |
| INF_ERR.setLevel(logging.ERROR) |
| DEB = logging.getLogger("DEB") |
| DEB.setLevel(logging.DEBUG) |
| |
| INF_UNDEF = logging.getLogger("INF.UNDEF") |
| INF_ERR_UNDEF = logging.getLogger("INF.ERR.UNDEF") |
| UNDEF = logging.getLogger("UNDEF") |
| |
| GRANDCHILD = logging.getLogger("INF.BADPARENT.UNDEF") |
| CHILD = logging.getLogger("INF.BADPARENT") |
| |
| #These should log |
| ERR.log(logging.FATAL, nextmessage()) |
| ERR.error(nextmessage()) |
| |
| INF.log(logging.FATAL, nextmessage()) |
| INF.error(nextmessage()) |
| INF.warn(nextmessage()) |
| INF.info(nextmessage()) |
| |
| INF_UNDEF.log(logging.FATAL, nextmessage()) |
| INF_UNDEF.error(nextmessage()) |
| INF_UNDEF.warn (nextmessage()) |
| INF_UNDEF.info (nextmessage()) |
| |
| INF_ERR.log(logging.FATAL, nextmessage()) |
| INF_ERR.error(nextmessage()) |
| |
| INF_ERR_UNDEF.log(logging.FATAL, nextmessage()) |
| INF_ERR_UNDEF.error(nextmessage()) |
| |
| DEB.log(logging.FATAL, nextmessage()) |
| DEB.error(nextmessage()) |
| DEB.warn (nextmessage()) |
| DEB.info (nextmessage()) |
| DEB.debug(nextmessage()) |
| |
| UNDEF.log(logging.FATAL, nextmessage()) |
| UNDEF.error(nextmessage()) |
| UNDEF.warn (nextmessage()) |
| UNDEF.info (nextmessage()) |
| |
| GRANDCHILD.log(logging.FATAL, nextmessage()) |
| CHILD.log(logging.FATAL, nextmessage()) |
| |
| #These should not log |
| ERR.warn(nextmessage()) |
| ERR.info(nextmessage()) |
| ERR.debug(nextmessage()) |
| |
| INF.debug(nextmessage()) |
| INF_UNDEF.debug(nextmessage()) |
| |
| INF_ERR.warn(nextmessage()) |
| INF_ERR.info(nextmessage()) |
| INF_ERR.debug(nextmessage()) |
| INF_ERR_UNDEF.warn(nextmessage()) |
| INF_ERR_UNDEF.info(nextmessage()) |
| INF_ERR_UNDEF.debug(nextmessage()) |
| |
| INF.info(FINISH_UP) |
| |
| def test_main_inner(): |
| rootLogger = logging.getLogger("") |
| rootLogger.setLevel(logging.DEBUG) |
| |
| tcpserver = LogRecordSocketReceiver(port=0) |
| port = tcpserver.socket.getsockname()[1] |
| |
| # Set up a handler such that all events are sent via a socket to the log |
| # receiver (logrecv). |
| # The handler will only be added to the rootLogger for some of the tests |
| shdlr = logging.handlers.SocketHandler('localhost', port) |
| rootLogger.addHandler(shdlr) |
| |
| # Configure the logger for logrecv so events do not propagate beyond it. |
| # The sockLogger output is buffered in memory until the end of the test, |
| # and printed at the end. |
| sockOut = cStringIO.StringIO() |
| sockLogger = logging.getLogger("logrecv") |
| sockLogger.setLevel(logging.DEBUG) |
| sockhdlr = logging.StreamHandler(sockOut) |
| sockhdlr.setFormatter(logging.Formatter( |
| "%(name)s -> %(levelname)s: %(message)s")) |
| sockLogger.addHandler(sockhdlr) |
| sockLogger.propagate = 0 |
| |
| #Set up servers |
| threads = [] |
| #sys.stdout.write("About to start TCP server...\n") |
| threads.append(threading.Thread(target=runTCP, args=(tcpserver,))) |
| |
| for thread in threads: |
| thread.start() |
| try: |
| test0() |
| |
| # XXX(nnorwitz): Try to fix timing related test failures. |
| # This sleep gives us some extra time to read messages. |
| # The test generally only fails on Solaris without this sleep. |
| #time.sleep(2.0) |
| shdlr.close() |
| rootLogger.removeHandler(shdlr) |
| |
| finally: |
| #wait for TCP receiver to terminate |
| socketDataProcessed.wait() |
| # ensure the server dies |
| tcpserver.abort = True |
| for thread in threads: |
| thread.join(2.0) |
| print(sockOut.getvalue()) |
| sockOut.close() |
| sockLogger.removeHandler(sockhdlr) |
| sockhdlr.close() |
| sys.stdout.flush() |
| |
| # config0 is a standard configuration. |
| config0 = """ |
| [loggers] |
| keys=root |
| |
| [handlers] |
| keys=hand1 |
| |
| [formatters] |
| keys=form1 |
| |
| [logger_root] |
| level=NOTSET |
| handlers=hand1 |
| |
| [handler_hand1] |
| class=StreamHandler |
| level=NOTSET |
| formatter=form1 |
| args=(sys.stdout,) |
| |
| [formatter_form1] |
| format=%(levelname)s:%(name)s:%(message)s |
| datefmt= |
| """ |
| |
| # config1 adds a little to the standard configuration. |
| config1 = """ |
| [loggers] |
| keys=root,parser |
| |
| [handlers] |
| keys=hand1 |
| |
| [formatters] |
| keys=form1 |
| |
| [logger_root] |
| level=NOTSET |
| handlers=hand1 |
| |
| [logger_parser] |
| level=DEBUG |
| handlers=hand1 |
| propagate=1 |
| qualname=compiler.parser |
| |
| [handler_hand1] |
| class=StreamHandler |
| level=NOTSET |
| formatter=form1 |
| args=(sys.stdout,) |
| |
| [formatter_form1] |
| format=%(levelname)s:%(name)s:%(message)s |
| datefmt= |
| """ |
| |
| def message(s): |
| sys.stdout.write("%s\n" % s) |
| |
| # config2 has a subtle configuration error that should be reported |
| config2 = string.replace(config1, "sys.stdout", "sys.stbout") |
| |
| # config3 has a less subtle configuration error |
| config3 = string.replace( |
| config1, "formatter=form1", "formatter=misspelled_name") |
| |
| def test_main(): |
| from test import test_support, test_logging |
| test_support.run_doctest(test_logging) |
| |
| if __name__=="__main__": |
| test_main() |