Example #1
0
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
Example #2
0
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)