--- anaconda_log.py | 13 +++++++++---- iutil.py | 33 +++++++++++++-------------------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/anaconda_log.py b/anaconda_log.py index 41f2c21..3be4e6a 100644 --- a/anaconda_log.py +++ b/anaconda_log.py @@ -31,7 +31,8 @@ DEFAULT_LEVEL = logging.INFO DEFAULT_ENTRY_FORMAT = "%(asctime)s,%(msecs)03d %(levelname)-8s: %(message)s" DEFAULT_DATE_FORMAT = "%H:%M:%S" -logFile = "/tmp/anaconda.log" +MAIN_LOG_FILE = "/tmp/anaconda.log" +PROGRAM_LOG_FILE = "/tmp/program.log" logLevelMap = {"debug": logging.DEBUG, "info": logging.INFO, "warning": logging.WARNING, "error": logging.ERROR, @@ -57,10 +58,14 @@ class AnacondaLog: # Create the base of the logger hierarcy. self.logger = logging.getLogger("anaconda") self.logger.setLevel(logging.DEBUG) + self.addFileHandler(MAIN_LOG_FILE, self.logger, + autoSetLevel=False, minLevel=logging.DEBUG) - # Add a handler for the log file. - self.addFileHandler (logFile, logging.getLogger("anaconda"), - autoSetLevel=False, minLevel=logging.DEBUG) + # External program output log + program_logger = logging.getLogger("program") + program_logger.setLevel(logging.DEBUG) + self.addFileHandler(PROGRAM_LOG_FILE, program_logger, + autoSetLevel=False, minLevel=logging.DEBUG) # Create a second logger for just the stuff we want to dup on # stdout. Anything written here will also get passed up to the diff --git a/iutil.py b/iutil.py index 39d398a..f393f60 100644 --- a/iutil.py +++ b/iutil.py @@ -37,18 +37,16 @@ _ = lambda x: gettext.ldgettext("anaconda", x) import logging log = logging.getLogger("anaconda") +program_log = logging.getLogger("program") #Python reimplementation of the shell tee process, so we can #feed the pipe output into two places at the same time class tee(threading.Thread): - def __init__(self, inputdesc, outputdesc, outputfile): + def __init__(self, inputdesc, outputdesc, outputlog): threading.Thread.__init__(self) self.inputdesc = os.fdopen(inputdesc, "r") self.outputdesc = outputdesc - if isinstance(outputfile, file): - self.file = outputfile - else: - self.file = open(outputfile, "a") + self.log = outputlog self.running = True def run(self): @@ -57,7 +55,7 @@ class tee(threading.Thread): if data == "": self.running = False else: - self.file.write(data) + self.log.debug(data.rstrip('\n')) os.write(self.outputdesc, data) def stop(self): @@ -111,8 +109,7 @@ def execWithRedirect(command, argv, stdin = None, stdout = None, elif stderr is None or not isinstance(stderr, file): stderr = sys.stderr.fileno() - runningLog = open("/tmp/program.log", "a") - runningLog.write("Running... %s\n" % ([command] + argv,)) + program_log.info("Running... %s" % ([command] + argv,)) #prepare os pipes for feeding tee proceses pstdout, pstdin = os.pipe() @@ -123,8 +120,8 @@ def execWithRedirect(command, argv, stdin = None, stdout = None, try: #prepare tee proceses - proc_std = tee(pstdout, stdout, runningLog) - proc_err = tee(perrout, stderr, runningLog) + proc_std = tee(pstdout, stdout, program_log) + proc_err = tee(perrout, stderr, program_log) #start monitoring the outputs proc_std.start() @@ -156,7 +153,7 @@ def execWithRedirect(command, argv, stdin = None, stdout = None, except OSError as e: errstr = "Error running %s: %s" % (command, e.strerror) log.error(errstr) - runningLog.write(errstr) + program_log.error(errstr) #close the input ends of pipes so we get EOF in the tee processes os.close(pstdin) os.close(perrin) @@ -182,7 +179,6 @@ def execWithCapture(command, argv, stdin = None, stderr = None, root='/'): os.chroot(root) def closefds (): - runningLog.close() stdinclose() stderrclose() @@ -209,8 +205,7 @@ def execWithCapture(command, argv, stdin = None, stderr = None, root='/'): elif stderr is None or not isinstance(stderr, file): stderr = sys.stderr.fileno() - runningLog = open("/tmp/program.log", "a") - runningLog.write("Running... %s\n" % ([command] + argv,)) + program_log.info("Running... %s" % ([command] + argv,)) env = os.environ.copy() env.update({"LC_ALL": "C"}) @@ -225,10 +220,10 @@ def execWithCapture(command, argv, stdin = None, stderr = None, root='/'): while True: (outStr, errStr) = proc.communicate() if outStr: - runningLog.write(outStr) + map(program_log.debug, outStr.splitlines()) rc += outStr if errStr: - runningLog.write(errStr) + map(program_log.error, errStr.splitlines()) os.write(stderr, errStr) if proc.returncode is not None: @@ -248,7 +243,6 @@ def execWithCallback(command, argv, stdin = None, stdout = None, os.chroot(root) def closefds (): - runningLog.close() stdinclose() stdoutclose() stderrclose() @@ -283,8 +277,7 @@ def execWithCallback(command, argv, stdin = None, stdout = None, elif stderr is None or not isinstance(stderr, file): stderr = sys.stderr.fileno() - runningLog = open("/tmp/program.log", "a") - runningLog.write("Running... %s\n" % ([command] + argv,)) + program_log.info("Running... %s\n" % ([command] + argv,)) p = os.pipe() childpid = os.fork() @@ -312,7 +305,7 @@ def execWithCallback(command, argv, stdin = None, stdout = None, if echo: os.write(stdout, s) - runningLog.write(s) + map(program_log.debug, s.splitlines()) if callback: callback(s, callback_data=callback_data) -- 1.6.2.5 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list