From ae8040d1ad9140061cd28df5b28a9eef26ab7fcb Mon Sep 17 00:00:00 2001 From: Kamil Kisiel Date: Mon, 31 Oct 2011 23:02:57 -0700 Subject: Some housekeeping in Logger.py Removed apparently unused functions (checked via grep) Refactored setup_logging in to several functions for clarity. --- src/lib/Logger.py | 173 ++++++++++++++---------------------------------------- 1 file changed, 45 insertions(+), 128 deletions(-) (limited to 'src') diff --git a/src/lib/Logger.py b/src/lib/Logger.py index 9fe81f47e..0acafb24c 100644 --- a/src/lib/Logger.py +++ b/src/lib/Logger.py @@ -10,44 +10,10 @@ import socket import struct import sys import termios -# Compatibility import -from Bcfg2.Bcfg2Py3k import fprint logging.raiseExceptions = 0 -def print_attributes(attrib): - """Add the attributes for an element.""" - return ' '.join(['%s="%s"' % data for data in list(attrib.items())]) - - -def print_text(text): - """Add text to the output (which will need normalising.""" - charmap = {'<': '<', - '>': '>', - '&': '&'} - return ''.join([charmap.get(char, char) for char in text]) + '\n' - - -def xml_print(element, running_indent=0, indent=4): - """Add an element and its children to the return string.""" - if (len(element.getchildren()) == 0) and (not element.text): - ret = (' ' * running_indent) - ret += '<%s %s/>\n' % (element.tag, print_attributes(element.attrib)) - else: - child_indent = running_indent + indent - ret = (' ' * running_indent) - ret += '<%s%s>\n' % (element.tag, print_attributes(element)) - if element.text: - ret += (' ' * child_indent) + print_text(element.text) - for child in element.getchildren(): - ret += xml_print(child, child_indent, indent) - ret += (' ' * running_indent) + '\n' % (element.tag) - if element.tail: - ret += (' ' * child_indent) + print_text(element.tail) - return ret - - class TermiosFormatter(logging.Formatter): """The termios formatter displays output in a terminal-sensitive fashion. @@ -95,8 +61,6 @@ class TermiosFormatter(logging.Formatter): for colNum in range(columns)] if idx < len(record.msg)] format = (len(indices) * (" %%-%ds " % columnWidth)) returns.append(format % tuple([record.msg[idx] for idx in indices])) - #elif type(record.msg) == lxml.etree._Element: - # returns.append(str(xml_print(record.msg))) else: returns.append(str(record.msg)) if record.exc_info: @@ -160,105 +124,58 @@ class FragmentingSysLogHandler(logging.handlers.SysLogHandler): pass +def add_console_handler(level): + """Add a logging handler that logs at a level to sys.stdout.""" + console = logging.StreamHandler(sys.stdout) + if level is True: + console.setLevel(logging.DEBUG) + else: + console.setLevel(level) + # tell the handler to use this format + console.setFormatter(TermiosFormatter()) + logging.root.addHandler(console) + + +def add_syslog_handler(procname, syslog_facility): + """Add a logging handler that logs as procname to syslog_facility.""" + try: + try: + syslog = FragmentingSysLogHandler(procname, + '/dev/log', + syslog_facility) + except socket.error: + syslog = FragmentingSysLogHandler(procname, + ('localhost', 514), + syslog_facility) + syslog.setLevel(logging.DEBUG) + syslog.setFormatter(logging.Formatter('%(name)s[%(process)d]: %(message)s')) + logging.root.addHandler(syslog) + except socket.error: + logging.root.error("failed to activate syslogging") + except: + print("Failed to activate syslogging") + + +def add_file_handler(to_file): + """Add a logging handler that logs to to_file.""" + filelog = logging.FileHandler(to_file) + filelog.setLevel(logging.DEBUG) + filelog.setFormatter(logging.Formatter('%(asctime)s %(name)s[%(process)d]: %(message)s')) + logging.root.addHandler(filelog) + + def setup_logging(procname, to_console=True, to_syslog=True, syslog_facility='daemon', level=0, to_file=None): """Setup logging for Bcfg2 software.""" if hasattr(logging, 'already_setup'): return - # add the handler to the root logger if to_console: - console = logging.StreamHandler(sys.stdout) - if to_console is True: - console.setLevel(logging.DEBUG) - else: - console.setLevel(to_console) - # tell the handler to use this format - console.setFormatter(TermiosFormatter()) - logging.root.addHandler(console) - + add_console_handler(to_console) if to_syslog: - try: - try: - syslog = FragmentingSysLogHandler(procname, - '/dev/log', - syslog_facility) - except socket.error: - syslog = FragmentingSysLogHandler(procname, - ('localhost', 514), - syslog_facility) - syslog.setLevel(logging.DEBUG) - syslog.setFormatter(logging.Formatter('%(name)s[%(process)d]: %(message)s')) - logging.root.addHandler(syslog) - except socket.error: - logging.root.error("failed to activate syslogging") - except: - print("Failed to activate syslogging") - - if not to_file == None: - filelog = logging.FileHandler(to_file) - filelog.setLevel(logging.DEBUG) - filelog.setFormatter(logging.Formatter('%(asctime)s %(name)s[%(process)d]: %(message)s')) - logging.root.addHandler(filelog) - + add_syslog_handler(procname, syslog_facility) + if to_file is not None: + add_file_handler(to_file) + logging.root.setLevel(level) logging.already_setup = True - - -def trace_process(**kwargs): - """Literally log every line of python code as it runs. - - Keyword arguments: - log -- file (name) to log to (default stderr) - scope -- base scope to log to (default Cobalt) - - """ - - file_name = kwargs.get("log", None) - if file_name is not None: - log_file = open(file_name, "w") - else: - log_file = sys.stderr - - scope = kwargs.get("scope", "Cobalt") - - def traceit(frame, event, arg): - if event == "line": - lineno = frame.f_lineno - filename = frame.f_globals["__file__"] - if (filename.endswith(".pyc") or - filename.endswith(".pyo")): - filename = filename[:-1] - name = frame.f_globals["__name__"] - line = linecache.getline(filename, lineno) - fprint("%s:%s: %s" % (name, lineno, line.rstrip()), log_file) - return traceit - - sys.settrace(traceit) - - -def log_to_stderr(logger_name, level=logging.INFO): - """Set up console logging.""" - try: - logger = logging.getLogger(logger_name) - except: - # assume logger_name is already a logger - logger = logger_name - handler = logging.StreamHandler() # sys.stderr is the default stream - handler.setLevel(level) - handler.setFormatter(TermiosFormatter()) # investigate this formatter - logger.addHandler(handler) - - -def log_to_syslog(logger_name, level=logging.INFO, format='%(name)s[%(process)d]: %(message)s'): - """Set up syslog logging.""" - try: - logger = logging.getLogger(logger_name) - except: - # assume logger_name is already a logger - logger = logger_name - # anticipate an exception somewhere below - handler = logging.handlers.SysLogHandler() # investigate FragmentingSysLogHandler - handler.setLevel(level) - handler.setFormatter(logging.Formatter(format)) - logger.addHandler(handler) -- cgit v1.2.3-1-g7c22