def chrome_log(response): request_duration = (time.time() - g.start_time) * 1000 queries_duration = g.get('queries_duration', 0.0) queries_count = g.get('queries_count', 0) group_name = '{} {} ({}, {:.2f}ms runtime, {} queries in {:.2f}ms)'.format( request.method, request.path, response.status_code, request_duration, queries_count, queries_duration) chromelogger.group_collapsed(group_name) endpoint = (request.endpoint or 'unknown').replace('.', '_') chromelogger.info('Endpoint: {}'.format(endpoint)) chromelogger.info('Content Type: {}'.format(response.content_type)) chromelogger.info('Content Length: {}'.format(response.content_length or -1)) log_queries() chromelogger.group_end(group_name) header = chromelogger.get_header() if header is not None: response.headers.add(*header) return response
def log_queries(): total_duration = 0.0 queries_count = 0 chromelogger.group("SQL Queries") for q in get_debug_queries(): total_duration += q.duration queries_count += 1 chromelogger.info(q.statement % q.parameters) chromelogger.info("Runtime: {:.2f}ms".format(1000 * q.duration)) chromelogger.info("{} queries executed in {:.2f}ms.".format(queries_count, total_duration*1000)) chromelogger.group_end("SQL Queries")
def chrome_log(response): request_duration = (time.time() - g.start_time) * 1000 # g程序上下文,存在于一次请求的处理的生命周期里 # database的监听器,每次查询都会记录进g # 下次请求g,重置 # D:\redash - master\redash\metrics\database.py # g.setdefault('queries_count', 0) # g.setdefault('queries_duration', 0) # g.queries_count += 1 # g.queries_duration += duration queries_duration = g.get('queries_duration', 0.0) queries_count = g.get('queries_count', 0) # 记录整个请求的时间 # get /resource (200, 100.10ms runtime, 5 queries in 50ms) group_name = '{} {} ({}, {:.2f}ms runtime, {} queries in {:.2f}ms)'.format( request.method, request.path, response.status_code, request_duration, queries_count, queries_duration) # 开始 console.group_collapsed(group_name) ###################################################################### endpoint = (request.endpoint or 'unknown').replace('.', '_') console.info('Endpoint: {}'.format(endpoint)) console.info('Content Type: {}'.format(response.content_type)) console.info('Content Length: {}'.format(response.content_length or -1)) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ log_queries() console.group_end(group_name) # 结束 ###################################################################### ## 固定搭配??? header = console.get_header() if header is not None: response.headers.add(*header) return response
def log_api_exception_to_browser_console(sender, exception, **extra): """Log an API exception to the browser's console.""" if sender.debug and sender.config.get('API_LOG_EXCEPTIONS_TO_BROWSER_CONSOLE'): try: import chromelogger type_, value_, traceback_ = sys.exc_info() tbs = traceback.extract_tb(traceback_) exc_only = traceback.format_exception_only(type_, value_) group_func = chromelogger.group_collapsed chromelogger.group_collapsed("%cAPI Server Error:", 'color: red;', str(exc_only[-1])) chromelogger.log('Traceback (most recent call last):') for i, tb in enumerate(tbs): if i == len(tbs) - 1: group_func = chromelogger.group # Expand the last stack frame group_func('%cFile "%s", line %i, in %s', 'font-weight: normal;', tb[0], tb[1], tb[2]) chromelogger.log(tb[3]) chromelogger.group_end() chromelogger.warn(''.join(exc_only)) chromelogger.group_end() except Exception: pass # Failures here should not prevent the API error response
def log_queries(): total_duration = 0.0 queries_count = 0 # 开始 console.group("SQL Queries") ###################################################################### # 记录此次请求, # 执行了几次sql,总共花了多长的执行时间,以及每次查询的内容,参数和时间 for q in get_debug_queries(): # 每次查询的内容,参数和时间 total_duration += q.duration queries_count += 1 console.info(q.statement % q.parameters) console.info("Runtime: {:.2f}ms".format(1000 * q.duration)) # 执行了几次sql,总共花了多长的执行时间, console.info("{} queries executed in {:.2f}ms.".format( queries_count, total_duration * 1000)) ###################################################################### console.group_end("SQL Queries")