Browse Source

新增日志模块错误层级输出配置项

dongzhaorui 2 months ago
parent
commit
605b53ac5e
1 changed files with 18 additions and 33 deletions
  1. 18 33
      FworkSpider/feapder/utils/log.py

+ 18 - 33
FworkSpider/feapder/utils/log.py

@@ -12,15 +12,11 @@ import os
 import sys
 from logging.handlers import BaseRotatingHandler
 
-import logstash
 import loguru
 from better_exceptions import format_exception
 
 import feapder.setting as setting
 
-LOG_FORMAT = "%(threadName)s|%(asctime)s|%(filename)s|%(funcName)s|line:%(lineno)d|%(levelname)s| %(message)s"
-PRINT_EXCEPTION_DETAILS = True
-
 
 class InterceptHandler(logging.Handler):
     def emit(self, record):
@@ -34,13 +30,7 @@ class InterceptHandler(logging.Handler):
 # 现在 xxx.log xxx1.log xxx2.log  如果backup_count 是2位数时  则 01  02  03 三位数 001 002 .. 文件由近及远
 class RotatingFileHandler(BaseRotatingHandler):
     def __init__(
-        self,
-        filename,
-        mode="a",
-        max_bytes=0,
-        backup_count=0,
-        encoding=None,
-        delay=0
+        self, filename, mode="a", max_bytes=0, backup_count=0, encoding=None, delay=0
     ):
         BaseRotatingHandler.__init__(self, filename, mode, encoding, delay)
         self.max_bytes = max_bytes
@@ -54,8 +44,6 @@ class RotatingFileHandler(BaseRotatingHandler):
 
         if self.backup_count > 0:
             for i in range(self.backup_count - 1, 0, -1):
-                # sfn = "%d_%s" % (i, self.baseFilename)
-                # dfn = "%d_%s" % (i + 1, self.baseFilename)
                 sfn = ("%0" + self.placeholder + "d.") % i  # '%2d.'%i -> 02
                 sfn = sfn.join(self.baseFilename.split("."))
                 dfn = ("%0" + self.placeholder + "d.") % (i + 1)
@@ -82,7 +70,6 @@ class RotatingFileHandler(BaseRotatingHandler):
             self.stream = self._open()
 
         if self.max_bytes > 0:  # are we rolling over?
-            # print('record >>>> ', record)
             msg = "%s\n" % self.format(record)
             self.stream.seek(0, 2)  # due to non-posix-compliant Windows feature
             if self.stream.tell() + len(msg) >= self.max_bytes:
@@ -97,7 +84,6 @@ def get_logger(
     log_level=None,
     is_write_to_console=None,
     is_write_to_file=None,
-    is_send_to_logstash = None,
     color=None,
     mode=None,
     max_bytes=None,
@@ -134,13 +120,6 @@ def get_logger(
         if is_write_to_file is not None
         else setting.LOG_IS_WRITE_TO_FILE
     )
-
-    is_send_to_logstash = (
-        is_send_to_logstash
-        if is_send_to_logstash is not None
-        else setting.LOG_IS_SEND_TO_LOGSTASH
-    )
-
     color = color if color is not None else setting.LOG_COLOR
     mode = mode or setting.LOG_MODE
     max_bytes = max_bytes or setting.LOG_MAX_BYTES
@@ -153,8 +132,8 @@ def get_logger(
     logger = logging.getLogger(name)
     logger.setLevel(log_level)
 
-    formatter = logging.Formatter(LOG_FORMAT)
-    if PRINT_EXCEPTION_DETAILS:
+    formatter = logging.Formatter(setting.LOG_FORMAT)
+    if setting.PRINT_EXCEPTION_DETAILS:
         formatter.formatException = lambda exc_info: format_exception(*exc_info)
 
     # 定义一个RotatingFileHandler,最多备份5个日志文件,每个日志文件最大10M
@@ -171,18 +150,11 @@ def get_logger(
         )
         rf_handler.setFormatter(formatter)
         logger.addHandler(rf_handler)
-
-    if is_send_to_logstash:
-        stash_handler = logstash.TCPLogstashHandler(
-            setting.LOG_STASH_IP, setting.LOG_STASH_PORT, version=1)
-        logger.addHandler(stash_handler)
-
     if color and is_write_to_console:
         loguru_handler = InterceptHandler()
         loguru_handler.setFormatter(formatter)
         # logging.basicConfig(handlers=[loguru_handler], level=0)
         logger.addHandler(loguru_handler)
-
     elif is_write_to_console:
         stream_handler = logging.StreamHandler()
         stream_handler.stream = sys.stdout
@@ -241,9 +213,9 @@ STOP_LOGS = [
 ]
 
 # 关闭日志打印
+OTHERS_LOG_LEVAL = eval("logging." + setting.OTHERS_LOG_LEVAL)
 for STOP_LOG in STOP_LOGS:
-    log_level = eval("logging." + setting.OTHERS_LOG_LEVAL)
-    logging.getLogger(STOP_LOG).setLevel(log_level)
+    logging.getLogger(STOP_LOG).setLevel(OTHERS_LOG_LEVAL)
 
 # print(logging.Logger.manager.loggerDict) # 取使用debug模块的name
 
@@ -253,6 +225,13 @@ for STOP_LOG in STOP_LOGS:
 class Log:
     log = None
 
+    def func(self, log_level):
+        def wrapper(msg, *args, **kwargs):
+            if self.isEnabledFor(log_level):
+                self._log(log_level, msg, args, **kwargs)
+
+        return wrapper
+
     def __getattr__(self, name):
         # 调用log时再初始化,为了加载最新的setting
         if self.__class__.log is None:
@@ -267,6 +246,12 @@ class Log:
     def info(self):
         return self.__class__.log.info
 
+    @property
+    def success(self):
+        log_level = logging.INFO + 1
+        logging.addLevelName(log_level, "success".upper())
+        return self.func(log_level)
+
     @property
     def warning(self):
         return self.__class__.log.warning