summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKamil Kisiel <kamil@kamilkisiel.net>2011-10-31 23:02:57 -0700
committerKamil Kisiel <kamil@kamilkisiel.net>2011-10-31 23:02:57 -0700
commitae8040d1ad9140061cd28df5b28a9eef26ab7fcb (patch)
treec5da7c4affa052deebe57e474cb472f1162454c6 /src
parentcc5d923c193b7e0645e758828323aed5aeb1f28e (diff)
downloadbcfg2-ae8040d1ad9140061cd28df5b28a9eef26ab7fcb.tar.gz
bcfg2-ae8040d1ad9140061cd28df5b28a9eef26ab7fcb.tar.bz2
bcfg2-ae8040d1ad9140061cd28df5b28a9eef26ab7fcb.zip
Some housekeeping in Logger.py
Removed apparently unused functions (checked via grep) Refactored setup_logging in to several functions for clarity.
Diffstat (limited to 'src')
-rw-r--r--src/lib/Logger.py173
1 files changed, 45 insertions, 128 deletions
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 = {'<': '&lt;',
- '>': '&gt;',
- '&': '&amp;'}
- 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) + '</%s>\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)