示例#1
0
def fileprint(filename,
              category,
              level=logging.DEBUG,
              maxBytes=1024 * 10124 * 100,
              backupCount=0):
    """
        Print files by file size.

        filename
          string, file name
        category
          string, category path of logs file in log directory
        level
          enumerated type of logging module, restrict whether logs to be printed or not
        maxBytes
          int, max limit of file size
        backupCount
          int, allowed numbers of file copys
        
    """
    path = os.path.join(CFG.filedir, category, filename)

    # Initialize filer
    filer = logging.getLogger(filename)
    frt = logging.Formatter('%(message)s')

    hdr = RotatingFileHandler(path, 'a', maxBytes, backupCount, 'utf-8')
    hdr.setFormatter(frt)
    hdr._name = '##_rfh_##'
    already_in = False
    for _hdr in filer.handlers:
        if _hdr._name == '##_rfh_##':
            already_in = True
            break
    if not already_in:
        filer.addHandler(hdr)

    hdr = logging.StreamHandler(sys.stdout)
    hdr.setFormatter(frt)
    hdr._name = '##_sh_##'
    already_in = False
    for _hdr in filer.handlers:
        if _hdr._name == '##_sh_##':
            already_in = True
    if not already_in:
        filer.addHandler(hdr)

    filer.setLevel(level)

    def _wraper(*args):
        if not args:
            return
        encoding = 'utf8' if os.name == 'posix' else 'gbk'
        args = [_cu(a, encoding) for a in args]
        filer.info(' '.join(args))

    return _wraper, filer
示例#2
0
def fileprint(filename, category, level=logging.DEBUG, maxBytes=1024*10124*100,
             backupCount=0):
    """
        Print files by file size.

        filename
          string, file name
        category
          string, category path of logs file in log directory
        level
          enumerated type of logging module, restrict whether logs to be printed or not
        maxBytes
          int, max limit of file size
        backupCount
          int, allowed numbers of file copys
        
    """
    path = os.path.join(CFG.filedir, category, filename)

    # Initialize filer
    filer = logging.getLogger(filename)
    frt = logging.Formatter('%(message)s')

    hdr = RotatingFileHandler(path, 'a', maxBytes, backupCount, 'utf-8')
    hdr.setFormatter(frt)
    hdr._name = '##_rfh_##'
    already_in = False
    for _hdr in filer.handlers:
        if _hdr._name == '##_rfh_##':
            already_in = True
            break
    if not already_in:
        filer.addHandler(hdr)

    hdr = logging.StreamHandler(sys.stdout)
    hdr.setFormatter(frt)
    hdr._name = '##_sh_##'
    already_in = False
    for _hdr in filer.handlers:
        if _hdr._name == '##_sh_##':
            already_in = True
    if not already_in:
        filer.addHandler(hdr)

    filer.setLevel(level)
    def _wraper(*args):
        if not args:
            return
        encoding = 'utf8' if os.name == 'posix' else 'gbk'
        args = [_cu(a, encoding) for a in args]
        filer.info(' '.join(args))
    return _wraper, filer
示例#3
0
def fileprint(filename, category, level=logging.DEBUG, maxBytes=1024*10124*100,
             backupCount=0, to_stdout=True):
    """
        生成日志输出的方法和对象
        @param filename 日志名称
        @param category 日志路径
        @param level 日志输出级别 (可选)
        @param maxBytes 日志单次输出最大长度 (可选)
        @param backupCount 日志轮询备份记录 (可选)
        @param to_stdout 是否屏幕输出 (可选)
        @return _wraper 返回日志方法
        @return filer 返回日志对象
    """
    path = os.path.join(FILEDIR, category, filename)

    # Initialize filer
    filer = logging.getLogger(filename)
    frt = logging.Formatter('%(message)s')
    hdr = None
    if path:
        hdr = RotatingFileHandler(path, 'a', maxBytes, backupCount, 'utf-8')
        hdr.setFormatter(frt)
        hdr._name = filename + '_p'
        already_in = False
        for _hdr in filer.handlers:
            if _hdr._name == filename + '_p':
                already_in = True
                break
        if not already_in:
            filer.addHandler(hdr)
    if to_stdout:
        hdr = logging.StreamHandler(sys.stdout)
        hdr.setFormatter(frt)
        hdr._name = filename + '_s'
        already_in = False
        for _hdr in filer.handlers:
            if _hdr._name == filename + '_s':
                already_in = True
        if not already_in:
            filer.addHandler(hdr)
    filer.setLevel(level)
    def _wraper(*args):
        if not LOGDEBUG:
            return
        if not args:
            return
        encoding = 'utf8' if os.name == 'posix' else 'gbk'
        args = [_cu(a, encoding) for a in args]
        filer.info(' '.join(args))
    return _wraper, filer
示例#4
0
    def register_loggers(app, level=logging.INFO):
        app.logger.removeHandler(default_handler)

        handlers = []

        log_format = (
            "%(asctime)s %(hostname)s {0} :%(levelname)s: "
            "ReqId:%(request_id)s %(message)s [in %(pathname)s:%(lineno)d]".format(
                app.config.get("PROJECT_NAME")
            )
        )

        context_utc_formatter = ContextUTCFormatter(log_format)

        if app.config.get("LOG_FILE"):
            if not os.path.exists(os.path.dirname(app.config["LOG_FILENAME"])):
                try:
                    print("Creating file {0}".format(app.config["LOG_FILENAME"]))
                    os.makedirs(os.path.dirname(app.config["LOG_FILENAME"]))
                except OSError as exc:
                    if exc.errno != errno.EEXIST:
                        raise

            rotating_file_handler = RotatingFileHandler(
                app.config.get("LOG_FILENAME"), maxBytes=1 * 1024 * 1024, backupCount=10
            )
            rotating_file_handler._name = "RotatingFileHandler"
            rotating_file_handler.setFormatter(context_utc_formatter)
            handlers.append(rotating_file_handler)

        if app.config.get("LOG_ADDRESS"):
            address = (app.config["LOG_ADDRESS"], app.config["LOG_PORT"])
            syslog_handler = SysLogHandler(address=address)
            syslog_handler._name = "SysLogHandler"
            syslog_formatter = ContextUTCFormatter(log_format, datefmt="%b %d %H:%M:%S")
            syslog_handler.setFormatter(syslog_formatter)
            handlers.append(syslog_handler)

        if app.config.get("LOG_STDOUT"):
            stream_handler = logging.StreamHandler(sys.stdout)
            stream_handler._name = "StreamHandler"
            stream_handler.setFormatter(context_utc_formatter)
            handlers.append(stream_handler)

        loggers = (
            app.logger,
            logging.getLogger("feedsearch"),
            logging.getLogger("tasks"),
        )

        for logger in loggers:
            for handler in handlers:
                handler.setLevel(level)
                logger.addHandler(handler)

            logger.setLevel(level)

        # Log incoming requests
        add_request_logger(app)

        app.logger.info("%s startup", app.config.get("PROJECT_NAME"))