调用管道工APi端点的函数名称

时间:2017-07-19 10:58:38

标签: r plumber

我需要实时输出API的带时间戳的日志。这些必须在R控制台上输出。

我在读取从API端点函数内部调用的SO问题here时写了这个函数。但是这会输出函数名“print_log”本身。当我用-2替换-1时,我得到了调用函数的完整代码但没有函数的名称。我只需要调用print_log的函数名称。

  print_log<-function(){
  api<-deparse(sys.calls()[[sys.nframe()-1]])
  sprintf("%20s:%40s",now(),api)
  }

1 个答案:

答案 0 :(得分:0)

我不确定如何纠正代码,但还有其他几种选择:

  1. 您可以使用处理请求记录的代理来管理Plumber。查看示例here
  2. 您可以使用在任何端点处理请求之前执行的管道工过滤器。
  3. #' @filter log
    function(req){
       cat("Incoming request for", req$PATH_INFO, "\n")
       forward()
    }
    
    #' @get /
    function(){
       # ...
    }
    

    如果您想要包含请求中提供的参数,您可以让过滤器接受...

    #' @filter logger
    function(...){
      print(list(...))
      forward()
    }
    

    对于像server.org/endpoint?a=1&b=2这样的请求,会打印出类似的内容:

    $res
    <PlumberResponse>
      Public:
      body: NULL
    clone: function (deep = FALSE) 
      headers: list
    initialize: function (serializer = serializer_json()) 
      serializer: function (val, req, res, errorHandler) 
        setCookie: function (name, value, path) 
          setHeader: function (name, value) 
            status: 200
    toResponse: function () 
    
    $req
    <environment: 0x108fbdff0>
    
    $a
    [1] "1"
    
    $b
    [1] "2"