def loghandler_members():
Members = namedtuple("<STR_LIT>", ["<STR_LIT:name>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>"])<EOL>log_manager = logging.Logger.manager<EOL>loggers = []<EOL>ignore = set([modname()])<EOL>if log_manager.root:<EOL><INDENT>loggers = list(log_manager.loggerDict.items())<EOL>loggers.append(("<STR_LIT:root>", log_manager.root))<EOL><DEDENT>for logger_name, logger in loggers:<EOL><INDENT>if logger_name in ignore: continue<EOL>for handler in getattr(logger, "<STR_LIT>", []):<EOL><INDENT>members = inspect.getmembers(handler)<EOL>for member_name, member in members:<EOL><INDENT>yield Members(logger_name, handler, member_name, member)<EOL><DEDENT><DEDENT><DEDENT>
iterate through the attributes of every logger's handler

    this is used to switch out stderr and stdout in tests when buffer is True

    :returns: generator of tuples, each tuple has (name, handler, member_name, member_val)