code: def trace(fmt=DEFAULT_FMT, prefix="test", flag=True):
      def decorate(func):
          @functools.wraps(func)
          def inner_wrapper(*args, **kwargs):
              # args[0] is an instance of ApiCollectionWrapper class
              flag = args[0].active_trace
              if flag:
                  start_time = datetime.utcnow().strftime(
                      "%Y-%m-%dT%H:%M:%SZ"
                  )
                  t0 = time.perf_counter()
                  res, result = func(*args, **kwargs)
                  elapsed = time.perf_counter() - t0
                  end_time = datetime.utcnow().strftime(
                      "%Y-%m-%dT%H:%M:%SZ"
                  )
                  func_name = func.__name__
                  collection_name = args[0].collection.name
                  # arg_lst = [repr(arg) for arg in args[1:]][:100]
                  # arg_lst.extend(f'{k}={v!r}' for k, v in kwargs.items())
                  # arg_str = ', '.join(arg_lst)[:200]
  
                  log_str = f"[{prefix}]" + fmt.format(**locals())
                  # TODO: add report function in this place, like uploading to influxdb
                  # it is better a async way to do this, in case of blocking the request processing
                  log.info(log_str)
                  return res, result
              else:
                  res, result = func(*args, **kwargs)
                  return res, result
  
          return inner_wrapper
  
      return decorate
  
imports: import time
  from datetime import datetime
  import functools
  from utils.util_log import test_log
label_desc: Use image node_id 1 for calling a global function with example usage: trace(fmt, prefix, flag) and returns: decorate, inner_wrapper, res,  result, res,  result