0

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

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

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

1 回答 1

0

我不确定如何纠正您拥有的代码,但还有其他一些选择:

  1. 您可以在 Plumber 前面使用处理请求记录的代理。请参阅此处的示例。
  2. 您可以使用在任何端点处理请求之前执行的管道工过滤器。

.

#' @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"
于 2017-07-19T14:01:22.433 回答