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
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
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
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"))