def setup(log_file, log_level=None): """ Configure the logging output. May be called multiple times. """ log_level = log_level or DEFAULT_LOG_LEVEL logging.setLoggerClass(_Logger) logging.getLogger(__package__).setLevel(log_level) r = logging.root if log_level >= logging.INFO or os.environ.get('FLASK_DEBUG'): # avoid spamming the log with debug messages from libraries r.setLevel(log_level) # Otherwise, name gets destroyed on Windows if log_file != LOG_TO_STDERR and log_file != LOG_TO_STDOUT: log_file = _absolute_log_file(log_file, DEFAULT_LOG_FILE) previous_handler = r.handlers[0] if r.handlers else None if previous_handler: # if the log_file has not changed, don't create a new handler if getattr(previous_handler, 'baseFilename', None) == log_file: return "" if log_file == DEFAULT_LOG_FILE else log_file logging.debug("logging to %s level %s", log_file, r.level) if log_file == LOG_TO_STDERR or log_file == LOG_TO_STDOUT: if log_file == LOG_TO_STDOUT: file_handler = StreamHandler(sys.stdout) file_handler.baseFilename = log_file else: file_handler = StreamHandler(sys.stderr) file_handler.baseFilename = log_file else: try: file_handler = RotatingFileHandler(log_file, maxBytes=100000, backupCount=2, encoding='utf-8') except IOError: if log_file == DEFAULT_LOG_FILE: raise file_handler = RotatingFileHandler(DEFAULT_LOG_FILE, maxBytes=100000, backupCount=2, encoding='utf-8') log_file = "" file_handler.setFormatter(FORMATTER) for h in r.handlers: r.removeHandler(h) h.close() r.addHandler(file_handler) logging.captureWarnings(True) return "" if log_file == DEFAULT_LOG_FILE else log_file
def setup(log_file, log_level=None): ''' Configure the logging output. May be called multiple times. ''' # if debugging, start logging to stderr immediately if os.environ.get('FLASK_DEBUG', None): log_file = LOG_TO_STDERR log_level = logging.DEBUG log_file = _absolute_log_file(log_file, DEFAULT_LOG_FILE) log_level = log_level or DEFAULT_LOG_LEVEL logging.getLogger(__package__).setLevel(log_level) r = logging.root if log_level >= logging.INFO or os.environ.get('FLASK_DEBUG'): # avoid spamming the log with debug messages from libraries r.setLevel(log_level) previous_handler = r.handlers[0] if r.handlers else None if previous_handler: # if the log_file has not changed, don't create a new handler if getattr(previous_handler, 'baseFilename', None) == log_file: return logging.debug("logging to %s level %s", log_file, r.level) if log_file == LOG_TO_STDERR: file_handler = StreamHandler() file_handler.baseFilename = LOG_TO_STDERR else: try: file_handler = RotatingFileHandler(log_file, maxBytes=50000, backupCount=2) except IOError: if log_file == DEFAULT_LOG_FILE: raise file_handler = RotatingFileHandler(DEFAULT_LOG_FILE, maxBytes=50000, backupCount=2) file_handler.setFormatter(FORMATTER) for h in r.handlers: r.removeHandler(h) h.close() r.addHandler(file_handler)