소스 검색

add log to sls

liqian 3 년 전
부모
커밋
71870ad356
4개의 변경된 파일143개의 추가작업 그리고 85개의 파일을 삭제
  1. 38 18
      app.py
  2. 26 2
      config.py
  3. 12 65
      log.py
  4. 67 0
      log_conf.py

+ 38 - 18
app.py

@@ -43,7 +43,8 @@ def homepage_recommend():
         app_type = request_data.get('appType')
         algo_type = request_data.get('algoType')
         client_info = request_data.get('clientInfo')
-        log_.info('homepage_recommend request data: {}'.format(request_data))
+        log_.info({'requestUri': '/applet/video/homepage/recommend', 'requestData': request_data})
+        # log_.info('homepage_recommend request data: {}'.format(request_data))
         # size默认为10
         if not size:
             size = 10
@@ -52,8 +53,15 @@ def homepage_recommend():
             videos = video_homepage_recommend(mid=mid, uid=uid, size=size, app_type=app_type,
                                               algo_type=algo_type, client_info=client_info)
             result = {'code': 200, 'message': 'success', 'data': {'videos': videos}}
-            log_.info('category_id: {}, mid: {}, uid: {}, result: {}, execute time = {}ms'.format(
-                category_id, mid, uid, result, (time.time() - start_time)*1000))
+            log_.info({'requestUri': '/applet/video/homepage/recommend',
+                       'app_type': app_type,
+                       'category_id': category_id,
+                       'mid': mid,
+                       'uid': uid,
+                       'result': result,
+                       'executeTime': (time.time() - start_time) * 1000})
+            # log_.info('category_id: {}, mid: {}, uid: {}, result: {}, execute time = {}ms'.format(
+            #     category_id, mid, uid, result, (time.time() - start_time)*1000))
             return json.dumps(result)
         elif category_id in config_.CATEGORY['other']:
             # 其他类别
@@ -88,13 +96,22 @@ def relevant_recommend():
         page_num = request_data.get('pageNum', 1)
         page_size = request_data.get('pageSize', 10)
         app_type = request_data.get('appType')
-        log_.info('relevant_recommend request data: {}'.format(request_data))
+        log_.info({'requestUri': '/applet/video/relevant/recommend', 'requestData': request_data})
+        # log_.info('requestUri = "{}", requestData = "{}"'.format('/applet/video/relevant/recommend', request_data))
+        # log_.info('relevant_recommend request data: {}'.format(request_data))
 
         videos = video_relevant_recommend(video_id=video_id, mid=mid, uid=uid, size=page_size, app_type=app_type)
 
         result = {'code': 200, 'message': 'success', 'data': {'videos': videos}}
-        log_.info('app_type: {}, mid: {}, uid: {}, relevant-result: {}, execute time = {}ms'.format(
-            app_type, mid, uid, result, (time.time() - start_time) * 1000))
+        log_.info({'requestUri': '/applet/video/relevant/recommend',
+                   'app_type': app_type,
+                   'mid': mid,
+                   'uid': uid,
+                   'result': result,
+                   'executeTime': (time.time() - start_time) * 1000})
+
+        # log_.info('app_type: {}, mid: {}, uid: {}, relevant-result: {}, execute time = {}ms'.format(
+        #     app_type, mid, uid, result, (time.time() - start_time) * 1000))
         return json.dumps(result)
     except Exception as e:
         log_.error(traceback.format_exc())
@@ -105,13 +122,10 @@ def relevant_recommend():
 # 管理后台实时修改rov
 @app.route('/applet/video/update/rov', methods=['GET', 'POST'])
 def update_rov():
-    # result = {'code': 200, 'message': 'success'}
-    # log_.info('result: {}'.format(result))
-    # return json.dumps(result)
-    # ##### 暂时关闭该接口
     try:
         request_data = json.loads(request.get_data())
-        log_.info('update_rov request data: {}'.format(request_data))
+        log_.info({'requestUri': '/applet/video/update/rov', 'requestData': request_data})
+        # log_.info('update_rov request data: {}'.format(request_data))
         # app_type = request_data.get('appType')
         video_id = request_data.get('videoId')
         rov_score = request_data.get('rovScore')
@@ -124,7 +138,8 @@ def update_rov():
         # update_video_w_h_rate(video_id=int(video_id), key_name=config_.W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME['rov_recall'])
 
         result = {'code': 200, 'message': 'update rov success'}
-        log_.info('result: {}'.format(result))
+        log_.info({'requestUri': '/applet/video/update/rov', 'result': result})
+        # log_.info('result: {}'.format(result))
         return json.dumps(result)
     except Exception as e:
         log_.error(traceback.format_exc())
@@ -136,28 +151,33 @@ def update_rov():
 @app.route('/app/video/hot_list', methods=['GET', 'POST'])
 def app_video_hot_list():
     try:
-        page_size= 10
+        page_size = 10
         request_data = request.get_data()
         request_data = json.loads(request_data)
         page = request_data.get('page', 0)
-        log_.info('app_video_hot_list request data: {}'.format(request_data))
+        log_.info({'requestUri': '/app/video/hot_lis', 'requestData': request_data})
+        # log_.info('app_video_hot_list request data: {}'.format(request_data))
 
         redis_helper = RedisHelper()
         datas = redis_helper.get_data_from_redis('app_video_hot_list')
 
         if datas is None or len(datas) == 0:
             result = {'code': -1, 'message': 'no data'}
-            log_.info('result: {}'.format(result))
+            log_.info({'requestUri': '/app/video/hot_lis', 'result': result})
+            # log_.info('result: {}'.format(result))
             return json.dumps(result)
         datas = ast.literal_eval(datas)
         total_page = int(len(datas)/page_size)
         if page > total_page -1 :
             result = {'code': -1, 'message': 'page exceed max'}
-            log_.info('result: {}'.format(result))
+            log_.info({'requestUri': '/app/video/hot_lis', 'result': result})
+            # log_.info('result: {}'.format(result))
             return json.dumps(result)
 
-        result = {'code': 200, 'message': '', 'data':{'total_page':total_page, 'hot_list':datas[page*page_size:page*page_size+page_size]}}
-        log_.info('result: {}'.format(result))
+        result = {'code': 200, 'message': '', 'data': {'total_page': total_page,
+                                                       'hot_list': datas[page*page_size:page*page_size+page_size]}}
+        log_.info({'requestUri': '/app/video/hot_lis', 'result': result})
+        # log_.info('result: {}'.format(result))
         return json.dumps(result)
 
     except Exception as e:

+ 26 - 2
config.py

@@ -193,6 +193,14 @@ class TestConfig(BaseConfig):
     # 获取视频在流量池中的剩余可分发数接口地址
     GET_REMAIN_VIEW_COUNT_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
 
+    # 日志服务配置
+    ALIYUN_LOG = {
+        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
+        'ACCESSID': 'LTAIWYUujJAm7CbH',
+        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
+        'PROJECT': 'rov-server-test',
+    }
+
 
 class PreProductionConfig(BaseConfig):
     """预发布环境配置"""
@@ -234,6 +242,14 @@ class PreProductionConfig(BaseConfig):
     # 获取视频在流量池中的剩余可分发数接口地址
     GET_REMAIN_VIEW_COUNT_URL = 'http://preapi-internal.piaoquantv.com/flowpool/video/remainViewCount'
 
+    # 日志服务配置
+    ALIYUN_LOG = {
+        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
+        'ACCESSID': 'LTAIWYUujJAm7CbH',
+        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
+        'PROJECT': 'rov-server',
+    }
+
 
 class ProductionConfig(BaseConfig):
     """生产环境配置"""
@@ -275,11 +291,19 @@ class ProductionConfig(BaseConfig):
     # 获取视频在流量池中的剩余可分发数接口地址
     GET_REMAIN_VIEW_COUNT_URL = 'http://api-internal.piaoquantv.com/flowpool/video/remainViewCount'
 
+    # 日志服务配置
+    ALIYUN_LOG = {
+        'ENDPOINT': 'cn-hangzhou.log.aliyuncs.com',
+        'ACCESSID': 'LTAIWYUujJAm7CbH',
+        'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P',
+        'PROJECT': 'rov-server',
+    }
+
 
 def set_config():
     # 获取环境变量 ROV_SERVER_ENV
-    env = os.environ.get('ROV_SERVER_ENV')
-    # env = 'dev'
+    # env = os.environ.get('ROV_SERVER_ENV')
+    env = 'dev'
     if env is None:
         # log_.error('ENV ERROR: is None!')
         return

+ 12 - 65
log.py

@@ -1,86 +1,33 @@
 import logging
 import logging.config
-import os
-import time
 
-from config import set_config
-
-config_ = set_config()
-
-# 配置
-conf = {'version': 1,
-        'formatters': {'rawformatter': {'class': 'logging.Formatter',
-                                        'format': '%(message)s'}
-                       },
-        'handlers': {'sls_handler': {'()':
-                                     'aliyun.log.QueuedLogHandler',
-                                     'level': 'INFO',
-                                     'formatter': 'rawformatter',
-
-                                     # custom args:
-                                     'end_point': config_.ALIYUN_LOG.get('ENDPOINT', ''),
-                                     'access_key_id': config_.ALIYUN_LOG.get('ACCESSID', ''),
-                                     'access_key': config_.ALIYUN_LOG.get('ACCESSKEY', ''),
-                                     'project': config_.ALIYUN_LOG.get('PROJECT', ''),
-                                     'log_store': "info"
-                                     }
-                     },
-        'loggers': {'sls': {'handlers': ['sls_handler', ],
-                            'level': 'INFO',
-                            'propagate': False}
-                    }
-        }
-logging.config.dictConfig(conf)
+from log_conf import conf
 
 
 class Log(object):
-    # def __init__(self, pag_source, log_path=os.path.join(os.path.dirname(os.path.realpath(__file__)), "logs")):
-    def __init__(self, log_path=os.path.join(os.path.dirname(os.path.realpath(__file__)), "logs")):
-        if not os.path.exists(log_path):
-            os.makedirs(log_path)
-
-        # 文件的命名
-        # self.logname = os.path.join(log_path, '{}_{}.log'.format(pag_source, time.strftime('%Y%m%d')))
-        self.logname = os.path.join(log_path, '{}.log'.format(time.strftime('%Y%m%d')))
-        self.logger = logging.getLogger('sls')
-        self.logger.setLevel(logging.DEBUG)
-        # 日志输出格式
-        self.formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')
-        # self.formatter = logging.Formatter('%(asctime)s [%(filename)s] %(levelname)s: %(message)s')
+    def __init__(self):
+        # 配置
+        logging.config.dictConfig(conf)
 
     def __console(self, level, message):
-        # 创建一个FileHandler,用于写到本地
-        fh = logging.FileHandler(self.logname, 'a', encoding='utf-8')
-        fh.setLevel(logging.DEBUG)
-        fh.setFormatter(self.formatter)
-        self.logger.addHandler(fh)
-
-        # 创建一个StreamHandler,用于输出到控制台
-        ch = logging.StreamHandler()
-        ch.setLevel(logging.DEBUG)
-        ch.setFormatter(self.formatter)
-        self.logger.addHandler(ch)
-
         if level == 'info':
-            self.logger.info(message)
+            logger = logging.getLogger('sls')
+            logger.info(message)
         elif level == 'debug':
-            self.logger.debug(message)
+            logger = logging.getLogger('root')
+            logger.debug(message)
         elif level == 'warning':
-            self.logger.warning(message)
+            logger = logging.getLogger('root')
+            logger.warning(message)
         elif level == 'error':
-            self.logger.error(message)
-        # 这两行代码是为了避免日志输出重复问题
-        self.logger.removeHandler(ch)
-        self.logger.removeHandler(fh)
-        # 关闭打开的文件
-        fh.close()
+            logger = logging.getLogger('error')
+            logger.error(message)
 
     def debug(self, message):
         self.__console('debug', message)
 
     def info(self, message):
         self.__console('info', message)
-        # return
 
     def warning(self, message):
         self.__console('warning', message)

+ 67 - 0
log_conf.py

@@ -0,0 +1,67 @@
+# log conf
+import logging
+from config import set_config
+config_ = set_config()
+
+conf = {
+    'version': 1,
+    'formatters': {
+        'rawFormatter': {
+            'class': 'logging.Formatter',
+            'format': '%(message)s'
+        },
+        'simpleFormatter': {
+            'class': 'logging.Formatter',
+            'format': '%(asctime)s %(name)s %(levelname)s: %(message)s'
+        }
+    },
+    'handlers': {
+        'consoleHandler': {
+            '()': 'logging.StreamHandler',
+            'level': 'DEBUG',
+            'formatter': 'simpleFormatter',
+        },
+        'slsHandler': {
+            '()': 'aliyun.log.QueuedLogHandler',
+            'level': 'INFO',
+            'formatter': 'rawFormatter',
+            # custom args:
+            'end_point': config_.ALIYUN_LOG.get('ENDPOINT', ''),
+            'access_key_id': config_.ALIYUN_LOG.get('ACCESSID', ''),
+            'access_key': config_.ALIYUN_LOG.get('ACCESSKEY', ''),
+            'project': config_.ALIYUN_LOG.get('PROJECT', ''),
+            'log_store': "info",
+            'extract_kv': True,
+            'extract_json': True
+        },
+        'errorHandler': {
+            '()': 'aliyun.log.QueuedLogHandler',
+            'level': 'ERROR',
+            'formatter': 'rawFormatter',
+            # custom args:
+            'end_point': config_.ALIYUN_LOG.get('ENDPOINT', ''),
+            'access_key_id': config_.ALIYUN_LOG.get('ACCESSID', ''),
+            'access_key': config_.ALIYUN_LOG.get('ACCESSKEY', ''),
+            'project': config_.ALIYUN_LOG.get('PROJECT', ''),
+            'log_store': "error",
+            'extract_kv': True,
+            'extract_json': True
+        }
+    },
+    'loggers': {
+        'root': {
+            'handlers': ['consoleHandler', ],
+            'level': 'DEBUG'
+        },
+        'sls': {
+            'handlers': ['consoleHandler', 'slsHandler'],
+            'level': 'INFO',
+            'propagate': False
+        },
+        'error': {
+            'handlers': ['consoleHandler', 'errorHandler'],
+            'level': 'ERROR',
+            'propagate': False
+        }
+    }
+}