def setup_logger(logger):
    supported_keys = [
        'asctime', 'levelname', 'lineno', 'module', 'message', 'name'
    ]
    custom_format = ' '.join(
        (lambda x: ['%({0:s})'.format(i) for i in x])(supported_keys))

    formatter = jsonlogger.JsonFormatter(custom_format)

    logger.setLevel(logging.DEBUG)

    h1 = RotatingFileHandler('debug.log', maxBytes=1000000, backupCount=1)
    h1.setLevel(logging.DEBUG)
    h1.addFilter(InfoFilter())
    h1.setFormatter(formatter)

    h2 = RotatingFileHandler('warning.log', maxBytes=1000000, backupCount=1)
    h2.setLevel(logging.WARNING)
    h2.setFormatter(formatter)

    h3 = RotatingFileHandler('error.log', maxBytes=1000000, backupCount=1)
    h3.setLevel(logging.ERROR)
    h3.setFormatter(formatter)

    logger.addHandler(h1)
    logger.addHandler(h2)
    logger.addHandler(h3)

    return logger
示例#2
0
def register_logger(app):
    # Formatter
    formatter = logging.Formatter(
        '%(asctime)s %(levelname)s %(process)d %(thread)d '
        '%(pathname)s %(lineno)s %(message)s')

    class InfoFilter(logging.Filter):
        def filter(self, record):
            if logging.INFO <= record.levelno < logging.ERROR:
                return super().filter(record)
            else:
                return 0

    # FileHandler Info
    file_handler_info = RotatingFileHandler(filename='info.log')
    file_handler_info.setFormatter(formatter)
    file_handler_info.setLevel(logging.INFO)
    info_filter = InfoFilter()
    file_handler_info.addFilter(info_filter)

    # FileHandler Error
    file_handler_error = RotatingFileHandler(filename='error.log')
    file_handler_error.setFormatter(formatter)
    file_handler_error.setLevel(logging.ERROR)

    app.logger.addHandler(file_handler_error)
    app.logger.addHandler(file_handler_info)
示例#3
0
def _get_handler():
    # we only need one global handler
    global handler
    if handler is not None:
        return handler

    path = '/var/log/rhsm/rhsm.log'
    try:
        if not os.path.isdir("/var/log/rhsm"):
            os.mkdir("/var/log/rhsm")
    except Exception:
        pass

    # Try to write to /var/log, fallback on console logging:
    try:
        handler = RotatingFileHandler(path,
                                      maxBytes=0x100000,
                                      backupCount=5,
                                      encoding='utf-8')
    except IOError:
        handler = logging.StreamHandler()
    except Exception:
        handler = logging.StreamHandler()

    handler.setFormatter(logging.Formatter(LOG_FORMAT))
    handler.setLevel(LOG_LEVEL)
    handler.addFilter(ContextLoggingFilter(name=""))

    return handler
示例#4
0
def register_logging(app):
    # TODO https://blog.csdn.net/zwxiaoliu/article/details/80890136
    # email errors to the administrators
    import logging
    from logging.handlers import RotatingFileHandler
    # Formatter
    formatter = logging.Formatter(
        '%(asctime)s %(levelname)s %(pathname)s %(lineno)s %(module)s.%(funcName)s %(message)s'
    )

    # log dir
    if not os.path.exists(app.config['LOG_PATH']):
        os.makedirs(app.config['LOG_PATH'])

    # FileHandler Info
    file_handler_info = RotatingFileHandler(
        filename=app.config['LOG_PATH_INFO'])
    file_handler_info.setFormatter(formatter)
    file_handler_info.setLevel(logging.INFO)
    info_filter = InfoFilter()
    file_handler_info.addFilter(info_filter)
    app.logger.addHandler(file_handler_info)

    # FileHandler Error
    file_handler_error = RotatingFileHandler(
        filename=app.config['LOG_PATH_ERROR'])
    file_handler_error.setFormatter(formatter)
    file_handler_error.setLevel(logging.ERROR)
    app.logger.addHandler(file_handler_error)
示例#5
0
def make_logger():
    logger = logging.getLogger('DownloaderForReddit')
    logger.setLevel(logging.DEBUG)

    stream_formatter = JsonStreamFormatter(
        '%(asctime)s: %(levelname)s : %(name)s : %(message)s',
        datefmt='%m/%d/%Y %I:%M:%S %p')

    json_formatter = jsonlogger.JsonFormatter(
        fmt=
        '%(levelname) %(version) %(platform) %(name) %(filename) %(module) %(funcName) %(lineno) %(message) '
        '%(asctime)',
        datefmt='%m/%d/%Y %I:%M:%S %p',
        json_indent=4,
        json_ensure_ascii=True)

    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(logging.DEBUG)
    stream_handler.setFormatter(stream_formatter)

    log_path = os.path.join(system_util.get_data_directory(),
                            'DownloaderForReddit.log')
    file_handler = RotatingFileHandler(log_path,
                                       maxBytes=1024 * 1024,
                                       backupCount=2)
    file_handler.addFilter(LogFilter())
    file_handler.setLevel(logging.INFO)
    file_handler.setFormatter(json_formatter)

    logger.addHandler(stream_handler)
    logger.addHandler(file_handler)
示例#6
0
def _get_handler(settings):
    """ Return a log handler object according to settings """
    filename = settings.get('LOG_FILE')
    if filename:
        encoding = settings.get('LOG_ENCODING')
        if settings.get("LOG_ROTATING") is True:
            max_bytes = settings.get('LOG_MAX_BYTES', 0)
            log_backup_count = settings.get('LOG_BACKUP_COUNT', 0)
            handler = RotatingFileHandler(filename,
                                          maxBytes=max_bytes,
                                          backupCount=log_backup_count,
                                          encoding=encoding)
        else:
            handler = logging.FileHandler(filename, encoding=encoding)
    elif settings.getbool('LOG_ENABLED'):
        handler = logging.StreamHandler()
    else:
        handler = logging.NullHandler()

    formatter = logging.Formatter(fmt=settings.get('LOG_FORMAT'),
                                  datefmt=settings.get('LOG_DATEFORMAT'))
    handler.setFormatter(formatter)
    handler.setLevel(settings.get('LOG_LEVEL'))
    if settings.getbool('LOG_SHORT_NAMES'):
        handler.addFilter(TopLevelFormatter(['scrapy']))
    return handler
示例#7
0
    def init_app(cls, app):
        # email errors to the administrators
        import logging
        from logging.handlers import RotatingFileHandler

        try:
            os.mkdir(cls.LOG_PATH)
        except FileExistsError:
            pass

        # Formatter
        formatter = logging.Formatter(
            '%(asctime)s %(levelname)s %(process)d %(thread)d '
            '%(pathname)s %(lineno)s %(message)s')

        # FileHandler Info
        file_handler_info = RotatingFileHandler(
            filename=cls.LOG_PATH_INFO,
            maxBytes=cls.LOG_FILE_MAX_BYTES,
            backupCount=cls.LOG_FILE_BACKUP_COUNT)
        file_handler_info.setFormatter(formatter)
        file_handler_info.setLevel(logging.INFO)
        info_filter = InfoFilter()
        file_handler_info.addFilter(info_filter)
        app.logger.addHandler(file_handler_info)

        # FileHandler Error
        file_handler_error = RotatingFileHandler(
            filename=cls.LOG_PATH_ERROR,
            maxBytes=cls.LOG_FILE_MAX_BYTES,
            backupCount=cls.LOG_FILE_BACKUP_COUNT)
        file_handler_error.setFormatter(formatter)
        file_handler_error.setLevel(logging.ERROR)
        app.logger.addHandler(file_handler_error)
示例#8
0
def _get_handler():
    # we only need one global handler
    global handler
    if handler is not None:
        return handler

    path = '/var/log/rhsm/rhsm.log'
    try:
        if not os.path.isdir("/var/log/rhsm"):
            os.mkdir("/var/log/rhsm")
    except Exception:
        pass

    # Try to write to /var/log, fallback on console logging:
    try:
        handler = RotatingFileHandler(path, maxBytes=0x100000, backupCount=5, encoding='utf-8')
    except IOError:
        handler = logging.StreamHandler()
    except Exception:
        handler = logging.StreamHandler()

    handler.setFormatter(logging.Formatter(LOG_FORMAT))
    handler.setLevel(LOG_LEVEL)
    handler.addFilter(ContextLoggingFilter(name=""))

    return handler
示例#9
0
def init_logger(level):
    """Add custom handler and set logger basic config

    Args:
        level (str): Logger level
    """
    logging.basicConfig(
        level=level,
        format=
        "%(asctime)s [%(levelname)-8s] %(lineno)-4s <%(name)s@%(funcName)s> - %(message)s",
        datefmt="%H:%M:%S",
    )

    root = logging.getLogger()

    file_handler = RotatingFileHandler(LOG_PATH,
                                       maxBytes=10 * 1024**2,
                                       backupCount=3,
                                       mode='w')
    file_handler.setLevel(level)
    file_formatter = logging.Formatter(
        fmt=
        "%(duplicates)s%(asctime)s [%(levelname)-8s] %(lineno)-4s <%(name)s@%(funcName)s> - %(message)s",
        datefmt="%Y/%m/%d %H:%M:%S",
    )
    file_handler.setFormatter(file_formatter)
    file_handler.addFilter(DuplicateFilter())
    root.addHandler(file_handler)
示例#10
0
def get_logger(logger_name):
    logger = logging.getLogger(logger_name)
    logger.setLevel(logging.DEBUG)

    log_formatter = logging.Formatter(
        fmt=
        "%(asctime)s, %(levelname)s, %(filename)s[line: %(lineno)d], %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S")

    for level, name in logging._levelToName.items():
        if level in (logging.NOTSET, logging.CRITICAL):
            continue

        log_dir = _create_log_dir(utils.settings.PROJECT_DIR, "logs",
                                  name.lower())
        log_handler = RotatingFileHandler(os.path.join(
            log_dir, "{}.log".format(name.lower())),
                                          maxBytes=1024 * 1000 * 10,
                                          backupCount=10,
                                          encoding="utf-8")
        log_handler.setLevel(level)
        log_handler.setFormatter(log_formatter)
        log_handler.addFilter(_LoggingFilter(level=level))
        logger.addHandler(log_handler)

    return logger
示例#11
0
def start_thread_logging():
    """
    Add a log handler to separate file for current thread
    """
    thread_name = threading.Thread.getName(threading.current_thread())
    log_file = '{}.log'.format(thread_name)

    log_handler = RotatingFileHandler(log_file,
                                      mode='a',
                                      maxBytes=5 * 1024 * 1024,
                                      backupCount=2,
                                      encoding=None,
                                      delay=0)

    log_handler.setLevel(Config.LOGGING_LEVEL)

    formatter = logging.Formatter("%(asctime)-15s"
                                  "| %(threadName)-11s"
                                  "| %(levelname)-5s"
                                  "| %(message)s")
    log_handler.setFormatter(formatter)

    log_filter = ThreadLogFilter(thread_name)
    log_handler.addFilter(log_filter)

    logger = logging.getLogger()
    logger.addHandler(log_handler)

    return log_handler
示例#12
0
文件: log.py 项目: sidya82/ptut
    def __init__(self) :
        """
        Define 3 differents log :
        activity.log -> all activity server
        warning.log -> only warning server (including illegal acess)
        error.log' -> error server
        Write all message on terminal too
        """
        logging.addLevelName(lvl.SUCCESS, "SUCCESS")

        self.logger = logging.getLogger()
        self.logger.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(asctime)-15s :: %(levelname)s :: %(message)s')

        file_handler = RotatingFileHandler('log/activity.log', 'a', 1000000, 1)
        file_handler.setLevel(logging.DEBUG)
        file_handler.setFormatter(formatter)
        self.logger.addHandler(file_handler)

        file_handler_warning = RotatingFileHandler('log/warning.log', 'a', 1000000, 1)
        f1 = SingleLevelFilter(logging.WARNING, False)
        file_handler_warning.addFilter(f1)
        file_handler_warning.setFormatter(formatter)
        self.logger.addHandler(file_handler_warning)

        file_handler_error = RotatingFileHandler('log/error.log', 'a', 1000000, 1)
        file_handler_error.setLevel(logging.ERROR)
        file_handler_error.setFormatter(formatter)
        self.logger.addHandler(file_handler_error)

        steam_handler = logging.StreamHandler()
        steam_handler.setLevel(logging.NOTSET)
        self.logger.addHandler(steam_handler)
示例#13
0
文件: app.py 项目: coco413/walle-web
def register_logging(app):
    # TODO https://blog.csdn.net/zwxiaoliu/article/details/80890136
    # email errors to the administrators
    import logging
    from logging.handlers import RotatingFileHandler
    # Formatter
    formatter = logging.Formatter(
            '%(asctime)s %(levelname)s %(pathname)s %(lineno)s %(module)s.%(funcName)s %(message)s')

    # log dir
    if not os.path.exists(app.config['LOG_PATH']):
        os.makedirs(app.config['LOG_PATH'])

    # FileHandler Info
    file_handler_info = RotatingFileHandler(filename=app.config['LOG_PATH_INFO'])
    file_handler_info.setFormatter(formatter)
    file_handler_info.setLevel(logging.INFO)
    info_filter = InfoFilter()
    file_handler_info.addFilter(info_filter)
    app.logger.addHandler(file_handler_info)

    # FileHandler Error
    file_handler_error = RotatingFileHandler(filename=app.config['LOG_PATH_ERROR'])
    file_handler_error.setFormatter(formatter)
    file_handler_error.setLevel(logging.ERROR)
    app.logger.addHandler(file_handler_error)
示例#14
0
def init_file_logging(app):
    class LogLevelFilter(object):
        """ Filter for log messages of a specific level. """
        def __init__(self, level):
            self.__level = level

        def filter(self, logRecord):
            return logRecord.levelno == self.__level

    # Add a file INFO logging handler.
    file_handler = RotatingFileHandler(app.config['LOG_FILENAME_INFO'],
                                       backupCount=10)
    formatter = logging.Formatter(
        "%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    file_handler.setLevel(logging.INFO)
    file_handler.addFilter(LogLevelFilter(logging.INFO))
    file_handler.setFormatter(formatter)
    app.logger.addHandler(file_handler)
    # Add a file ERROR logging handler.
    file_handler = RotatingFileHandler(app.config['LOG_FILENAME_ERROR'],
                                       backupCount=10)
    formatter = logging.Formatter(
        "%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    file_handler.setLevel(logging.ERROR)
    file_handler.setFormatter(formatter)
    app.logger.addHandler(file_handler)
示例#15
0
def common(path_list):
    print(path_list)
    formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s '
                                  '[in %(pathname)s:%(lineno)d]')
    debug_log = path_list['debug']
    not_exist_makedirs(os.path.dirname(debug_log))

    debug_file_handler = RotatingFileHandler(debug_log,
                                             maxBytes=1000000,
                                             backupCount=10)

    debug_file_handler.addFilter(LevelFilter(logging.DEBUG))
    #debug_file_handler.setLevel(logging.DEBUG)
    debug_file_handler.setFormatter(formatter)
    app.logger.addHandler(debug_file_handler)

    error_log = path_list['error']
    not_exist_makedirs(os.path.dirname(error_log))
    error_file_handler = RotatingFileHandler(error_log,
                                             maxBytes=1000000,
                                             backupCount=10)
    error_file_handler.addFilter(LevelFilter(logging.ERROR))
    #error_file_handler.setLevel(logging.ERROR)
    error_file_handler.setFormatter(formatter)
    app.logger.addHandler(error_file_handler)

    app.logger.propagate = False

    app.logger.setLevel(logging.DEBUG)  ##
示例#16
0
def logger_create(service_name, app):
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)

    log_path = os.path.join(dirname(dirname(abspath(__file__))), 'apps',
                            service_name, 'log')

    if not os.path.exists(log_path):
        os.mkdir(log_path)
    formatter = TloggerFormatter(
        f"[%(asctime)s][%(process)d][{service_name}][%(filename)s %(lineno)d %(levelname)s]: %(message)s"
    )

    logfile = f'{log_path}/{service_name}.log'
    fh = RotatingFileHandler(logfile, maxBytes=10 * 1024 * 1024, backupCount=5)
    fh.setLevel(logging.INFO)
    info_filter = InfoFilter()
    fh.addFilter(info_filter)
    fh.setFormatter(formatter)

    error_logfile = f'{log_path}/{service_name}_error.log'
    fh_error = RotatingFileHandler(error_logfile,
                                   maxBytes=10 * 1024 * 1024,
                                   backupCount=5)
    fh_error.setLevel(logging.ERROR)
    fh_error.setFormatter(formatter)

    sh = logging.StreamHandler()
    sh.setLevel(logging.DEBUG)
    sh.setFormatter(formatter)

    app.logger.removeHandler(default_handler)
    app.logger.addHandler(sh)
    app.logger.addHandler(fh)
    app.logger.addHandler(fh_error)
示例#17
0
def setup_logging():
    max_bytes = 32 * 1024 * 1024  # 32 MiB
    logging.getLogger("centauri").setLevel(logging.INFO)
    logging.getLogger("centauri-debug").setLevel(logging.DEBUG)

    log = logging.getLogger()
    log.setLevel(logging.DEBUG)
    handler = RotatingFileHandler(
        filename="centauri.log",
        encoding="utf-8",
        mode="w",
        maxBytes=max_bytes,
        backupCount=5,
    )

    handler2 = RotatingFileHandler(
        filename="centauri-debug.log",
        encoding="utf-8",
        mode="w",
        maxBytes=max_bytes,
        backupCount=5,
    )
    dt_fmt = "%Y-%m-%d %H:%M:%S"
    fmt = logging.Formatter("[{asctime}] [{levelname:<7}] {name}: {message}",
                            dt_fmt,
                            style="{")
    handler.setFormatter(fmt)
    handler2.setFormatter(fmt)

    handler2.addFilter(DebugFilter())

    log.addHandler(handler)
    log.addHandler(handler2)
示例#18
0
def init_log(filter=None):
    log = logging.getLogger()
    log.setLevel(logging.DEBUG)

    formatter = logging.Formatter(FORMAT)

    # add file rotation handler
    file_handler = RotatingFileHandler(
        filename='/var/log/mediaplat/mediaplat.log',
        maxBytes=1024 * 1024,
        backupCount=5,
        mode='a+')

    stream_handler = logging.StreamHandler()

    if filter:
        file_handler.addFilter(filter)
        stream_handler.addFilter(filter)

    # log to file
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(formatter)
    log.addHandler(file_handler)

    if DEBUG:
        # duplicate log to stdout with color
        stream_handler.setLevel(logging.DEBUG)
        stream_handler.setFormatter(ColoredFormatter())
        log.addHandler(stream_handler)
示例#19
0
def init_log(filter=None):
    log = logging.getLogger()
    log.setLevel(logging.DEBUG)

    formatter = logging.Formatter(FORMAT)

    # add file rotation handler
    file_handler = RotatingFileHandler(
        filename="/var/log/mediaplat/mediaplat.log", maxBytes=1024 * 1024, backupCount=5, mode="a+"
    )

    stream_handler = logging.StreamHandler()

    if filter:
        file_handler.addFilter(filter)
        stream_handler.addFilter(filter)

    # log to file
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(formatter)
    log.addHandler(file_handler)

    if DEBUG:
        # duplicate log to stdout with color
        stream_handler.setLevel(logging.DEBUG)
        stream_handler.setFormatter(ColoredFormatter())
        log.addHandler(stream_handler)
示例#20
0
 def handler_file_info(self):
     if not self._handler_file_info:
         file_handler_info = RotatingFileHandler(filename=self.log_path_info)
         file_handler_info.setFormatter(self.log_formatter_info)
         file_handler_info.setLevel(self.level_info)
         file_handler_info.addFilter(self.filter_info)
         self._handler_file_info = file_handler_info
     return self._handler_file_info
示例#21
0
 def get_logging_handler(self, log_level=None):
     logfile = os.path.join(self.application_home, 'hydropick.log')
     # make handler
     from logging.handlers import RotatingFileHandler
     handler = RotatingFileHandler(logfile, backupCount=5)
     handler.doRollover()
     handler.setFormatter(self.get_formatter(log_level))
     handler.addFilter(self.get_filter(log_level))
     return handler
示例#22
0
def set_pkt_logging(logger, cc_stdout=False, **kwargs) -> None:
    """Create/configure handlers, formatters, etc.

    Parameters:
    - backup_count: keep this many copies, and rotate at midnight unless...
    - max_bytes: rotate log files when log > rotate_size
    """
    file_name = kwargs.get(LOG_FILE_NAME, 0)
    backup_count = kwargs.get(LOG_ROTATE_COUNT, 0)
    max_bytes = kwargs.get(LOG_ROTATE_BYTES, None)

    logger.propagate = False

    if _use_color_:
        cons_fmt = colorlog.ColoredFormatter(
            f"%(log_color)s{CONSOLE_FMT + COLOR_SUFFIX}",
            reset=True,
            log_colors=LOG_COLOURS,
        )
    else:
        cons_fmt = logging.Formatter(fmt=CONSOLE_FMT + BANDW_SUFFIX)

    handler = logging.StreamHandler(stream=sys.stderr)
    handler.setFormatter(cons_fmt)
    handler.setLevel(logging.WARNING)
    handler.addFilter(StdErrFilter())
    logger.addHandler(handler)

    if cc_stdout:
        handler = logging.StreamHandler(stream=sys.stdout)
        handler.setFormatter(cons_fmt)
        handler.setLevel(logging.DEBUG)
        handler.addFilter(StdOutFilter())
        logger.addHandler(handler)

    if not file_name:
        return

    if max_bytes:
        backup_count = backup_count if backup_count else 2
        handler = RotatingFileHandler(file_name,
                                      maxBytes=max_bytes,
                                      backupCount=backup_count)
    elif backup_count:
        handler = TimedRotatingFileHandler(file_name,
                                           when="midnight",
                                           backupCount=backup_count)
    else:
        handler = logging.FileHandler(file_name)

    handler.setFormatter(logging.Formatter(fmt=PKT_LOG_FMT + BANDW_SUFFIX))
    handler.setLevel(logging.INFO)  # INFO (usually), or DEBUG
    handler.addFilter(FileFilter())
    logger.addHandler(handler)
示例#23
0
def start_log():
    log.start_syslog('openxcap')
    if Logging.directory:
        if not os.path.exists(Logging.directory):
            os.mkdir(Logging.directory)
        handler = RotatingFileHandler(os.path.join(Logging.directory, 'access.log'), 'a', 2*1024*1024, 5)
        handler.addFilter(IsAccessLog())
        log.logger.addHandler(handler)
        for handler in log.logger.handlers:
            if isinstance(handler, log.SyslogHandler):
                handler.addFilter(IsNotAccessLog())
示例#24
0
def config_logging(stdout_file, stderr_file):
    LOG_LEVEL = os.environ.get('LOG_LEVEL', 'DEBUG')
    max_bytes = 1024 * 1024 * 10
    stdout_handler = RotatingFileHandler(stdout_file, maxBytes=max_bytes, backupCount=100)
    stdout_handler.addFilter(NoErrorFilter())
    stderr_handler = RotatingFileHandler(stderr_file, maxBytes=max_bytes, backupCount=100)
    stderr_handler.setLevel('ERROR')
    console_handler = logging.StreamHandler(sys.stdout)
    logging.basicConfig(format='[%(levelname)1.1s %(asctime)s %(module)s:%(lineno)d] %(message)s',
                        datefmt='%Y%m%d-%H:%M:%S', handlers=[stdout_handler, console_handler, stderr_handler],
                        level=LOG_LEVEL)
示例#25
0
文件: logger.py 项目: hughplay/TVR
def get_logger(name,
               log_dir=None,
               level=logging.INFO,
               split_error=False,
               fmt=default_fmt,
               use_tqdm=False):
    logger = logging.getLogger(name)
    if getattr(logger, 'initialized', False):
        return logger
    logger.initialized = True

    logger.setLevel(parse_level(level))

    del logger.handlers[:]

    if log_dir:
        log_dir = Path(log_dir).expanduser()
        log_dir.mkdir(parents=True, exist_ok=True)
        log_file = log_dir / default_log
        file_handler = RotatingFileHandler(str(log_file),
                                           maxBytes=log_max_bytes,
                                           backupCount=log_backup_count)
        file_handler.setFormatter(logging.Formatter(fmt))
        logger.addHandler(file_handler)

        if split_error:
            file_handler.addFilter(InfoFilter())

            error_log_file = log_dir / default_error_log
            error_file_handler = RotatingFileHandler(
                error_log_file,
                maxBytes=log_max_bytes,
                backupCount=log_backup_count)
            error_file_handler.formatter = logging.Formatter(fmt)
            error_file_handler.addFilter(ErrorFilter())
            logger.addHandler(error_file_handler)

    if use_tqdm:
        from tqdm import tqdm

        class TqdmHandler(logging.StreamHandler):
            def emit(self, record):
                msg = self.format(record)
                tqdm.write(msg)

        stream_handler = TqdmHandler()
    else:
        stream_handler = logging.StreamHandler()
    stream_handler.formatter = ColorFormatter(fmt)
    logger.addHandler(stream_handler)

    return logger
def init_logging():

    global logger

    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)
    handler = RotatingFileHandler(log_path, maxBytes=10000000, backupCount=5)
    handler.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s %(hostname)s GNS3-Hostname-Grabber: [%(levelname)s] %(message)s',
                                  datefmt='%Y-%m-%d %H:%M:%S')
    handler.setFormatter(formatter)
    f = ContextFilter()
    handler.addFilter(f)
    logger.addHandler(handler)
示例#27
0
    def init_app(cls, app):
        # FileHandler Info
        file_handler_info = RotatingFileHandler(filename=cls.LOG_PATH_INFO)
        file_handler_info.setFormatter(cls.LOGGING_FORMATTER)
        file_handler_info.setLevel(logging.INFO)
        info_filter = InfoFilter()
        file_handler_info.addFilter(info_filter)
        app.logger.addHandler(file_handler_info)

        # FileHandler Error
        file_handler_error = RotatingFileHandler(filename=cls.LOG_PATH_ERROR)
        file_handler_error.setFormatter(cls.LOGGING_FORMATTER)
        file_handler_error.setLevel(logging.ERROR)
        app.logger.addHandler(file_handler_error)
示例#28
0
def configure_logger(log_file_suffix=""):
    suffix = log_file_suffix if not log_file_suffix else "." + log_file_suffix
    app_handler = RotatingFileHandler(
        paths.logs_path(f"{APP_LOG_FILE}{suffix}.log"), mode="w")
    app_handler.setFormatter(formatter)
    app_handler.setLevel(logging.DEBUG)
    app_handler.addFilter(BOOKWORM_FILTER)
    logger.addHandler(app_handler)

    error_handler = logging.FileHandler(
        paths.logs_path(f"{ERROR_LOG_FILE}{suffix}.log"), mode="w")
    error_handler.setFormatter(formatter)
    error_handler.setLevel(logging.ERROR)
    logger.addHandler(error_handler)
示例#29
0
文件: logger.py 项目: jb344/Hue
    def configure_log(name):
        """
            Configure a logger, for logging DEBUG, INFO, and WARN message to one file, and ERR, and CRIT to a different
            file
                :param name:        Name of the logger object, we usually just pass in the name of the calling file
                :return:            ERROR on failure, logger object on success
        """
        try:
            test_and_mkdir(LOGGING_PATH)

            logger = logging.getLogger(name)

            # Create a rotating file handler that rotates every 50MB, and stores only the last 5 logs, aka 250MB of data
            error_handler = RotatingFileHandler(filename=LOGGING_PATH.joinpath(
                ERROR_LOG_FILE + "_{}.log".format(get_current_date_time())),
                                                mode="w+",
                                                maxBytes=52428800,
                                                backupCount=5,
                                                encoding="ISO8859-1")
            standard_handler = RotatingFileHandler(
                filename=LOGGING_PATH.joinpath(
                    STANDARD_LOG_FILE +
                    "_{}.log".format(get_current_date_time())),
                mode="w+",
                maxBytes=52428800,
                backupCount=5,
                encoding="ISO8859-1")

            # Specify the format of the log files
            error_handler.setFormatter(LOG_FILE_FORMAT)
            standard_handler.setFormatter(LOG_FILE_FORMAT)

            # Add filters to our handlers so only DEBUG, INFO, and WARN go to the standard log file, while ERR, and CRIT go to
            # the error file
            error_handler.addFilter(ErrorFilter())
            standard_handler.addFilter(StandardFilter())

            # Add the handlers to our logger so they actually get used
            logger.addHandler(error_handler)
            logger.addHandler(standard_handler)

            # Override the default logging level of WARN, so we will get INFO messages out
            logger.setLevel(logging.INFO)

            # Set the class field to our new logger
            Logger.LOGGER = logger
        except Exception as err:
            print(err)
            return ERROR
示例#30
0
文件: app.py 项目: nordi81/eMonitor
def configure_logging(app):
    """
    Configure logging

    :param app: :py:class:`Flask`
    """
    from logging.handlers import RotatingFileHandler

    class MyFilter(object):
        def __init__(self, level):
            self.__level = level

        def filter(self, logRecord):
            return logRecord.levelno == self.__level

    formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s")
    accesslogger = logging.getLogger('werkzeug')
    if app.debug:
        accesslogger.propagate = False
        file_handler = RotatingFileHandler('{}{}-access.log'.format(app.config.get('PATH_DATA'), app.name), maxBytes=1024 * 1024 * 100, backupCount=20)
        file_handler.setFormatter(formatter)
        accesslogger.addHandler(file_handler)
        app.logger.addHandler(accesslogger)

        # set debug mode to all other loggers of emonitor, use loglevel definition of emonitor.cfg
        for l in [l for l in logging.Logger.manager.loggerDict if l.startswith(app.name.lower())]:
            lo = logging.getLogger(l)
            if lo.level > logging.DEBUG:
                lo.setLevel(app.config.get('LOGLEVEL', logging.DEBUG))
    else:
        accesslogger.setLevel(logging.ERROR)
        for l in [l for l in logging.Logger.manager.loggerDict if l.startswith(app.name.lower())]:
            logging.getLogger(l).setLevel(app.config.get('LOGLEVEL', logging.ERROR))

    logger = logging.getLogger('alembic.runtime.migration')
    logger.setLevel(logging.ERROR)
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)

    file_handler = RotatingFileHandler('%s%s.log' % (app.config.get('PATH_DATA'), app.name), maxBytes=1024 * 1024 * 100, backupCount=20)
    file_handler.setFormatter(formatter)
    file_handler.setLevel(logging.INFO)
    logger.addHandler(file_handler)

    file_handler = RotatingFileHandler('%s%s-error.log' % (app.config.get('PATH_DATA'), app.name), maxBytes=1024 * 1024 * 100, backupCount=20)
    file_handler.setFormatter(formatter)
    file_handler.addFilter(MyFilter(logging.ERROR))
    file_handler.setLevel(logging.ERROR)
    logger.addHandler(file_handler)
示例#31
0
def create_rotating_file_handler(filename) -> RotatingFileHandler:
    file_handler = RotatingFileHandler(filename,
                                       maxBytes=1024**2,
                                       backupCount=1,
                                       encoding="utf-8")

    formatter = logging.Formatter(
        "%(asctime)s [%(levelname)s] (%(filename)s).%(funcName)s(%(lineno)d): "
        "%(message)s")

    file_handler.setFormatter(formatter)
    file_handler.setLevel(logging.DEBUG)
    file_handler.addFilter(lambda record: record.levelno != logging.INFO)

    return file_handler
示例#32
0
    def init_app(cls, app):
        BaseConfig.init_app(app)

        # email errors to the administrators
        import logging
        from logging.handlers import RotatingFileHandler
        # Formatter
        # formatter = logging.Formatter(
        #     '%(asctime)s %(levelname)s %(process)d %(thread)d'
        #     '%(module)s %(lineno)s %(message)s')

        formatter = RequestFormatter(
            '[%(asctime)s] %(remote_addr)s requested %(url)s'
            ' --- %(levelname)s in %(module)s: %(message)s'
        )

        # FileHandler Info
        file_handler_info = RotatingFileHandler(filename=cls.LOG_PATH_INFO)
        file_handler_info.setFormatter(formatter)
        file_handler_info.setLevel(logging.INFO)
        info_filter = InfoFilter()
        file_handler_info.addFilter(info_filter)
        app.logger.addHandler(file_handler_info)

        # FileHandler Error
        file_handler_error = RotatingFileHandler(filename=cls.LOG_PATH_ERROR)
        file_handler_error.setFormatter(formatter)
        file_handler_error.setLevel(logging.ERROR)
        app.logger.addHandler(file_handler_error)

        # email errors to the administrators
        import logging
        from logging.handlers import SMTPHandler
        credentials = None
        secure = None
        if getattr(cls, 'MAIL_USERNAME', None) is not None:
            credentials = (cls.MAIL_USERNAME, cls.MAIL_PASSWORD)
            if getattr(cls, 'MAIL_USE_TLS', None):
                secure = ()
        mail_handler = SMTPHandler(
            mailhost=(cls.MAIL_SERVER, cls.MAIL_PORT),
            fromaddr=cls.CIRCULATE_MAIL_SENDER,
            toaddrs=[cls.CIRCULATE_ADMIN],
            subject=cls.CIRCULATE_MAIL_SUBJECT_PREFIX + ' Application Error',
            credentials=credentials,
            secure=secure)
        mail_handler.setLevel(logging.ERROR)
        app.logger.addHandler(mail_handler)
示例#33
0
def register_logger(app):
  formatter = logging.Formatter(
    '%(asctime)s %(levelname)s %(process)d %(thread)d '
    '%(pathname)s %(lineno)s %(message)s')
  # FileHandler Info
  file_handler_info = RotatingFileHandler(filename=app.config.get('LOG_PATH_INFO'), maxBytes=10*1024*1024, backupCount=10)
  file_handler_info.setFormatter(formatter)
  file_handler_info.setLevel(logging.INFO)
  info_filter = InfoFilter()
  file_handler_info.addFilter(info_filter)
  app.logger.addHandler(file_handler_info)
  # FileHandler Error
  file_handler_error = RotatingFileHandler(filename=app.config.get('LOG_PATH_ERROR'), maxBytes=10*1024*1024, backupCount=10)
  file_handler_error.setFormatter(formatter)
  file_handler_error.setLevel(logging.ERROR)
  app.logger.addHandler(file_handler_error)
示例#34
0
 def init_app(cls, app):
     import logging
     from logging.handlers import RotatingFileHandler
     formatter = logging.Formatter(
         '%(asctime)s %(levelname)s %(process)d %(thread)d %(funcName)s %(pathname)s %(lineno)s %(message)s'
     )
     file_handler_info = RotatingFileHandler(filename=cls.LOG_PATH_INFO)
     file_handler_info.setFormatter(formatter)
     file_handler_info.setLevel(logging.INFO)
     info_filter = InfoFilter()
     file_handler_info.addFilter(info_filter)
     app.logger.addHandler(file_handler_info)
     file_handler_error = RotatingFileHandler(filename=cls.LOG_PATH_ERROR)
     file_handler_error.setFormatter(formatter)
     file_handler_error.setLevel(logging.ERROR)
     app.logger.addHandler(file_handler_error)
示例#35
0
    def __init__(self, class_name):
        """Constructor"""
        '''default root console logging'''
        self.logger = logging.getLogger(class_name)
        self.logger.setLevel(logging.DEBUG)
        '''console file logging'''
        debug_file_handler = logging.StreamHandler(sys.stdout)
        debug_file_handler.setLevel(logging.DEBUG)
        debug_file_handler.addFilter(
            type(
                '', (logging.Filter, ),
                {'filter': staticmethod(lambda r: r.levelno <= logging.DEBUG)
                 }))
        '''error file logging'''
        error_file_handler = RotatingFileHandler(config['error_log_file'],
                                                 mode='a',
                                                 maxBytes=5 * 1024 * 1024,
                                                 backupCount=100,
                                                 encoding='utf-8',
                                                 delay=0)

        error_file_handler.setLevel(logging.ERROR)
        error_file_handler.addFilter(
            type(
                '', (logging.Filter, ),
                {'filter': staticmethod(lambda r: r.levelno <= logging.ERROR)
                 }))
        '''tracking file logging'''
        tracking_file_handler = RotatingFileHandler(
            config['tracking_log_file'],
            mode='a',
            maxBytes=5 * 1024 * 1024,
            backupCount=100,
            encoding='utf-8',
            delay=0)

        tracking_file_handler.setLevel(logging.INFO)
        tracking_file_handler.addFilter(
            type(
                '', (logging.Filter, ),
                {'filter': staticmethod(lambda r: r.levelno <= logging.INFO)}))

        self.logger.addHandler(debug_file_handler)
        self.logger.addHandler(error_file_handler)
        self.logger.addHandler(tracking_file_handler)
示例#36
0
    def __init__(self, config=None):
        if config is None:
            config = Config()

        # Create a logger instance.  NOTE: the level set in the logger
        # determines which severity of messages it will pass to it's
        # handlers.  We want to send everything to the handlers and
        # let them decide what to do (aka this must pass everything
        # along).
        logger = logging.getLogger('')
        logger.setLevel(logging.DEBUG)

        # Create file handler for WARNING and above
        if not config.log is None:
            fmt = ('%(asctime)s, '
                   '%(clientip)s, '
                   '%(levelname)s, '
                   'pid:%(process)d, '
                   '%(name)s, '
                   '%(filename)s:%(lineno)d, '
                   '%(message)s'
                  )
            fh = RotatingFileHandler(config.log,
                                     maxBytes=104857600,
                                     backupCount=5)
            fh.addFilter(logging.Filter(ROOT))
            fh.setLevel(config.log_level)
            fh.setFormatter(logging.Formatter(fmt))
            logger.addHandler(fh)

        # Create file handler for DEBUG and above
        if config.debug and config.log:
            fmt = ('%(levelname)-9s'
                   '%(name)-35s'
                   '%(filename)-15s'
                   '%(lineno)-5d'
                   '%(message)s'
                  )
            fh = RotatingFileHandler(config.log + '.debug',
                                     maxBytes=104857600,
                                     backupCount=5)
            fh.setLevel(config.log_level - 20)
            fh.setFormatter(logging.Formatter(fmt))
            logger.addHandler(fh)
示例#37
0
文件: logger.py 项目: frappe/frappe
def get_logger(module, with_more_info=True):
    if module in frappe.loggers:
        return frappe.loggers[module]

    formatter = logging.Formatter("[%(levelname)s] %(asctime)s | %(pathname)s:\n%(message)s")
    # handler = logging.StreamHandler()

    handler = RotatingFileHandler(LOG_FILENAME, maxBytes=100000, backupCount=20)
    handler.setFormatter(formatter)

    if with_more_info:
        handler.addFilter(SiteContextFilter())

    logger = logging.getLogger(module)
    logger.setLevel(frappe.log_level or default_log_level)
    logger.addHandler(handler)
    logger.propagate = False

    frappe.loggers[module] = logger

    return logger
示例#38
0
def init_file_logging(app):
    class LogLevelFilter(object):
	""" Filter for log messages of a specific level. """
	def __init__(self, level):
	    self.__level = level
	def filter(self, logRecord):
	    return logRecord.levelno == self.__level
    # Add a file INFO logging handler.
    file_handler = RotatingFileHandler(app.config['LOG_FILENAME_INFO'],
                                       backupCount=10)
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    file_handler.setLevel(logging.INFO)
    file_handler.addFilter(LogLevelFilter(logging.INFO))
    file_handler.setFormatter(formatter)
    app.logger.addHandler(file_handler)
    # Add a file ERROR logging handler.
    file_handler = RotatingFileHandler(app.config['LOG_FILENAME_ERROR'],
				       backupCount=10)
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    file_handler.setLevel(logging.ERROR)
    file_handler.setFormatter(formatter)
    app.logger.addHandler(file_handler)
示例#39
0
def _configure_logger(l, config=None, level=None):
    verbose = 0
    log_file = None
    quiet = False

    if config:
        verbose = config.verbose
        log_file = config.log_file
        quiet = config.quiet

    if level:
        log_level = level
    else:
        if verbose == 0:
            log_level = logging.ERROR
        if verbose == 1:
            log_level = logging.WARN
        if verbose == 2:
            log_level = logging.INFO
        if verbose > 2:
            log_level = logging.DEBUG

    if log_file:
        max_size = 1 * 1024 * 1024 # 1MB
        filehandler = RotatingFileHandler(log_file, maxBytes=max_size,
                                          backupCount=5)
        filehandler.addFilter(context_filter)
        l.addHandler(filehandler)
        if os.path.getsize(log_file) > max_size/2:
            filehandler.doRollover()

    if quiet:
        l.removeHandler(consolehandler)

    l.setLevel(log_level)

    logger.info('Finished setting up logger %s %s %s', l.name, log_level,
                log_file)
示例#40
0
def setup_logging(level, logfile=None, maxsize=None, maxfiles=None):
    # Quiet down some of the libraries that we use.
    logging.getLogger("paramiko").setLevel(logging.WARN)
    logging.getLogger("requests").setLevel(logging.WARN)
    logging.getLogger("bzrest").setLevel(logging.INFO)

    if logfile:
        handler = RotatingFileHandler(logfile, maxBytes=maxsize, backupCount=maxfiles)
    else:
        handler = logging.StreamHandler()
        
    class SlaveLogFilter(logging.Filter):
        def filter(self, record):
            record.slave = getattr(log_data, "slave", "-=-")
            return True

    fmt = logging.Formatter("%(asctime)s - %(levelname)s - %(slave)s - %(message)s")
    handler.addFilter(SlaveLogFilter())
    handler.setFormatter(fmt)

    logger = logging.getLogger()
    logger.addHandler(handler)
    logger.setLevel(level)
示例#41
0
class MyFilter(object):
    def __init__(self, level):
        self.__level = level

    def filter(self, logRecord):
        return logRecord.levelno == self.__level

app = Flask(__name__)
json = FlaskJSON(app)
app.config['JSON_ADD_STATUS'] = False
cors = CORS(app, resources={r"/*": {"origins": config.ALLOW_CORS}})

# logging for warnings
warning_handler = RotatingFileHandler('./logs/warnings.log', maxBytes=10*1024*1024, backupCount=1)
warning_handler.setLevel(logging.WARNING)
warning_handler.addFilter(MyFilter(logging.WARNING))
app.logger.addHandler(warning_handler)

# logging for errors and critical
error_handler = RotatingFileHandler('./logs/errors.log', maxBytes=10*1024*1024, backupCount=1)
error_handler.setLevel(logging.ERROR)
app.logger.addHandler(error_handler)

#logging for web requests
access_handler = RotatingFileHandler('./logs/access.log', maxBytes=10*1024*1024, backupCount=1)
access_logger = logging.getLogger('werkzeug')
access_logger.addHandler(access_handler)

# logging for database queries
peewee_handler = RotatingFileHandler('./logs/database.log', maxBytes=10*1024*1024, backupCount=1)
peewee_logger = logging.getLogger('peewee')
示例#42
0
文件: logs.py 项目: level12/blazeweb
def create_handlers_from_settings(settings):
    """
        used internally to setup logging for the settings.logs
    """
    # clear any previously setup handlers
    clear_settings_handlers()

    if not settings.logs.enabled:
        return

    # have to set the root logger lower than WARN (the default) or our
    # application logs will never be seen
    logging.root.setLevel(APPLICATION)

    if settings.logs.errors.enabled:
        format_str = "%(asctime)s - %(levelname)s - %(name)s - %(message)s"
        formatter = logging.Formatter(format_str)

        error_handler = RotatingFileHandler(
            path.join(settings.dirs.logs, 'errors.log'),
            maxBytes=settings.logs.max_bytes,
            backupCount=settings.logs.backup_count,
        )
        error_handler._from_blazeweb_settings = True
        error_handler.setLevel(logging.WARN)
        error_handler.setFormatter(formatter)
        logging.root.addHandler(error_handler)

    if settings.logs.application.enabled:
        class OnlyLevel25(logging.Filter):
            def filter(self, record):
                return record.levelno == 25

        format_str = "%(asctime)s - %(name)s - %(message)s"
        formatter = logging.Formatter(format_str)

        app_handler = RotatingFileHandler(
            path.join(settings.dirs.logs, 'application.log'),
            maxBytes=settings.logs.max_bytes,
            backupCount=settings.logs.backup_count,
        )
        app_handler._from_blazeweb_settings = True
        app_handler.setLevel(APPLICATION)
        app_handler.setFormatter(formatter)
        app_handler.addFilter(OnlyLevel25())
        logging.root.addHandler(app_handler)

    if settings.logs.email.enabled:
        format_str = "%(asctime)s - %(message)s"
        formatter = logging.Formatter(format_str)

        app_handler = RotatingFileHandler(
            path.join(settings.dirs.logs, 'email.log'),
            maxBytes=settings.logs.max_bytes,
            backupCount=settings.logs.backup_count,
        )
        app_handler._from_blazeweb_settings = True
        app_handler.setLevel(logging.INFO)
        app_handler.setFormatter(formatter)
        logging.getLogger('blazeweb.mail').addHandler(app_handler)
        logging.getLogger('blazeweb.mail').setLevel(logging.INFO)
def get_script_logger(debug=True, quiet=False, config=None):
    """Creates a script logger to log to files / streams."""

    log_file_format = (config
        and config['LOG_FILE_FORMAT']
        or '%(levelname)s %(asctime)s %(message)s')

    log_file_datefmt = (config
        and config['LOG_FILE_DATEFMT']
        or '[%Y-%m-%d %H:%M:%S]')

    script_log_info_file_handler = None

    if config:
        script_log_info_file_handler = RotatingFileHandler(
            path.join(config['LOG_FOLDER'], 'script_info.log'),
            maxBytes=100000, backupCount=5)
        script_log_info_file_handler.setLevel(logging.INFO)
        script_log_info_file_handler.setFormatter(Formatter(
            log_file_format, log_file_datefmt))
        script_log_info_file_handler.addFilter(
            LevelSpecificLogFilter(logging.WARNING))

    script_log_error_file_handler = None

    if config:
        script_log_error_file_handler = RotatingFileHandler(
            path.join(config['LOG_FOLDER'], 'script_error.log'),
            maxBytes=100000, backupCount=5)
        script_log_error_file_handler.setLevel(logging.ERROR)
        script_log_error_file_handler.setFormatter(Formatter(
            log_file_format, log_file_datefmt))

    script_log_info_stream_handler = StreamHandler(
        quiet and open(os.devnull, 'a') or sys.stdout)
    script_log_info_stream_handler.setLevel(logging.INFO)
    script_log_info_stream_handler.setFormatter(Formatter(
        log_file_format, log_file_datefmt))
    script_log_info_stream_handler.addFilter(
        LevelSpecificLogFilter(logging.WARNING))

    script_log_error_stream_handler = StreamHandler(
        quiet and open(os.devnull, 'a') or sys.stderr)
    script_log_error_stream_handler.setLevel(logging.ERROR)
    script_log_error_stream_handler.setFormatter(Formatter(
        log_file_format, log_file_datefmt))

    script_logger = logging.getLogger('script')
    script_logger.setLevel(logging.INFO)

    if config:
        script_logger.addHandler(script_log_info_file_handler)
        script_logger.addHandler(script_log_error_file_handler)

    script_logger.addHandler(script_log_info_stream_handler)
    script_logger.addHandler(script_log_error_stream_handler)

    if (not debug) and config:
        mail_handler = get_mail_handler(config)
        script_logger.addHandler(mail_handler)

    return script_logger
示例#44
0
文件: __init__.py 项目: McIndi/mast
def make_logger(
        name,
        level=level,
        fmt=_format,
        max_bytes=max_bytes,
        backup_count=backup_count,
        delay=delay,
        propagate=propagate,
    ):
    """
    _function_: `mast.logging.make_logger(name, level=level, fmt=_format, filename=None, when=unit, interval=interval, propagate=propagate, backup_count=backup_count)`

    Returns an instance of logging.Logger configured with
    a [logging.handlers.TimedRotatingFileHandler](https://docs.python.org/2/library/logging.handlers.html#timedrotatingfilehandler)
    handler.

    Arguments passed to this function determine the format,
    level, filename, time unit, interval, backup count and
    whether to propagate messages to parent loggers (defined
    by dot seperated heirarchy ie in `mast.datapower`,
    `datapower` is a logger with a parent logger of mast).

    Parameters:

    * `name`: Required. the name of the logger instance. This follows
    conventions mentioned [here](https://docs.python.org/2/library/logging.html#logger-objects)
    * `level`: The logging level to listen for. Accepts an `int` or
    one of the logging modules convenience constants defined
    [here](https://docs.python.org/2/library/logging.html#logging-levels)
    * `fmt`: The format of the log message, see
    [here](https://docs.python.org/2/library/logging.html#formatter-objects)
    and [here](https://docs.python.org/2/library/logging.html#logrecord-attributes)
    for more details
    * `filename`: The filename to log to. Defaults to the name of the logger
    appended with `.log` in the `$MAST_HOME/var/log` directory or
    `$MAST_HOME/var/log/mastd` directory if running as `mastd`
    * `when`: The time unit to use for rolling over the log file
    as detailed [here](https://docs.python.org/2/library/logging.handlers.html#timedrotatingfilehandler)
    * `interval`: The number of time units to wait before rolling the
    log files as detailed [here](https://docs.python.org/2/library/logging.handlers.html#timedrotatingfilehandler)
    * `propagate`: Whether to propagate log messages up the ancestry chain
    (ie. if you have a logger `mast.datapower`, and propagate is set to
    `False` messages sent to the this logger will not be propagated to the
    `mast` logger). See [here](https://docs.python.org/2/library/logging.html#logging.Logger.propagate)
    for more details.
    * `backup_count`: The number of "rolled" log files to keep, see
    [here](https://docs.python.org/2/library/logging.handlers.html#timedrotatingfilehandler)
    for more details.

    Usage:

        :::python
        from mast.logging import make_logger

        logger = make_logger("my_module")
        logger.info("informational message")
        logger.debug("debug message")
    """
    global t
    _logger = logging.getLogger(name)
    if _logger.handlers:
        if len(_logger.handlers) >= 1:
            return _logger

    _logger.setLevel(level)
    _formatter = logging.Formatter(fmt)

    pid = os.getpid()
    directory = os.path.join(
        mast_home,
        "var",
        "log",
        getpass.getuser(),
        "{}-{}".format(t.timestamp, str(pid)),
    )
    filename = os.path.join(
        directory,
        "{}-{}.log".format(name, t.timestamp),
    )
    if not os.path.exists(directory):
        os.makedirs(directory)
    _handler = RotatingFileHandler(
        filename,
        maxBytes=max_bytes,
        backupCount=backup_count,
        delay=delay,
    )
    _handler.setFormatter(_formatter)
    _handler.setLevel(level)
    _handler.addFilter(RedactingFilter())
    _logger.addHandler(_handler)
    _logger.propagate = propagate
    return _logger