From 9935853fa13c834d644512a561835b72a5bf3dc8 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Mon, 29 Sep 2008 11:55:10 +0000 Subject: Get rid of errant newlines (Resolves #599 for real this time) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@4925 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Logger.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'src/lib/Logger.py') diff --git a/src/lib/Logger.py b/src/lib/Logger.py index b9b4679bb..bb3c703a6 100644 --- a/src/lib/Logger.py +++ b/src/lib/Logger.py @@ -158,3 +158,58 @@ def setup_logging(procname, to_console=True, to_syslog=True, syslog_facility='da logging.root.addHandler(filelog) 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) + print >> log_file, "%s:%s: %s" % (name, lineno, line.rstrip()) + 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