From 997c78a08b432dd7c5bf49091a48551156aef7ec Mon Sep 17 00:00:00 2001 From: Bas Stottelaar Date: Sun, 16 Nov 2014 23:45:54 +0100 Subject: [PATCH] Initialize logger to output to screen until it is known where to put the log files. --- Headphones.py | 4 ++++ headphones/__init__.py | 11 +++++++---- headphones/logger.py | 27 ++++++++++++++------------- headphones/webserve.py | 3 ++- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/Headphones.py b/Headphones.py index b0315ab6..0d31534e 100755 --- a/Headphones.py +++ b/Headphones.py @@ -89,6 +89,10 @@ def main(): if args.quiet: headphones.QUIET = True + # Do an intial setup of the logger. + logger.initLogger(console=not headphones.QUIET, log_dir=False, + verbose=headphones.VERBOSE) + if args.daemon: if sys.platform == 'win32': sys.stderr.write( diff --git a/headphones/__init__.py b/headphones/__init__.py index 164a1a07..0ef4adcc 100644 --- a/headphones/__init__.py +++ b/headphones/__init__.py @@ -126,12 +126,15 @@ def initialize(config_file): try: os.makedirs(CONFIG.LOG_DIR) except OSError: - if VERBOSE: - sys.stderr.write( - 'Unable to create the log directory. Logging to screen only.\n') + CONFIG.LOG_DIR = None + + if not QUIET: + sys.stderr.write("Unable to create the log directory. " \ + "Logging to screen only.\n") # Start the logger, disable console if needed - logger.initLogger(console=not QUIET, verbose=VERBOSE) + logger.initLogger(console=not QUIET, log_dir=CONFIG.LOG_DIR, + verbose=VERBOSE) if not CONFIG.CACHE_DIR: # Put the cache dir in the data dir for now diff --git a/headphones/logger.py b/headphones/logger.py index 781d5402..84c08df3 100644 --- a/headphones/logger.py +++ b/headphones/logger.py @@ -39,7 +39,6 @@ logger = logging.getLogger("headphones") # Global queue for multiprocessing logging queue = None - class LogListHandler(logging.Handler): """ Log handler for Web UI. @@ -112,7 +111,7 @@ def initMultiprocessing(): threading.current_thread().name = multiprocessing.current_process().name -def initLogger(console=False, verbose=False): +def initLogger(console=False, log_dir=False, verbose=False): """ Setup logging for Headphones. It uses the logger instance with the name 'headphones'. Three log handlers are added: @@ -121,7 +120,8 @@ def initLogger(console=False, verbose=False): * LogListHandler: for Web UI * StreamHandler: for console (if console) - Console logging is only enabled if console is set to True. + Console logging is only enabled if console is set to True. This method can + be invoked multiple times, during different stages of Headphones. """ # Close and remove old handlers. This is required to reinit the loggers @@ -139,22 +139,23 @@ def initLogger(console=False, verbose=False): logger.propagate = False logger.setLevel(logging.DEBUG if verbose else logging.INFO) - # Setup file logger - filename = os.path.join(headphones.CONFIG.LOG_DIR, FILENAME) - - file_formatter = logging.Formatter('%(asctime)s - %(levelname)-7s :: %(threadName)s : %(message)s', '%d-%b-%Y %H:%M:%S') - file_handler = handlers.RotatingFileHandler(filename, maxBytes=MAX_SIZE, backupCount=MAX_FILES) - file_handler.setLevel(logging.DEBUG) - file_handler.setFormatter(file_formatter) - - logger.addHandler(file_handler) - # Add list logger loglist_handler = LogListHandler() loglist_handler.setLevel(logging.DEBUG) logger.addHandler(loglist_handler) + # Setup file logger + if log_dir: + filename = os.path.join(log_dir, FILENAME) + + file_formatter = logging.Formatter('%(asctime)s - %(levelname)-7s :: %(threadName)s : %(message)s', '%d-%b-%Y %H:%M:%S') + file_handler = handlers.RotatingFileHandler(filename, maxBytes=MAX_SIZE, backupCount=MAX_FILES) + file_handler.setLevel(logging.DEBUG) + file_handler.setFormatter(file_formatter) + + logger.addHandler(file_handler) + # Setup console logger if console: console_formatter = logging.Formatter('%(asctime)s - %(levelname)s :: %(threadName)s : %(message)s', '%d-%b-%Y %H:%M:%S') diff --git a/headphones/webserve.py b/headphones/webserve.py index 075c7819..ea173427 100644 --- a/headphones/webserve.py +++ b/headphones/webserve.py @@ -747,7 +747,8 @@ class WebInterface(object): def toggleVerbose(self): headphones.VERBOSE = not headphones.VERBOSE - logger.initLogger(not headphones.QUIET, headphones.VERBOSE) + logger.initLogger(console=not headphones.QUIET, + log_dir=headphones.CONFIG.LOG_DIR, verbose=headphones.VERBOSE) logger.info("Verbose toggled, set to %s", headphones.VERBOSE) logger.debug("If you read this message, debug logging is available") raise cherrypy.HTTPRedirect("logs")