使用RestRserve将每个请求记录到单独的json文件中

时间:2020-05-12 11:48:58

标签: r restrserve

如何设置一个使用RestRserve将每个请求记录到不同的json文件?

我尝试使用lgr包(在RestRserve's doc on logging中引用),如下所示:

library(RestRserve)
library(lgr)

app = Application$new(content_type = "text/plain")

# RestRserve logger
app$logger = RestRserve::Logger$new(level = "trace", name = "mylogger",
  printer=function(timestamp, level, logger_name, pid, message, ...)
  {
    lgr$log(level=tolower(level), msg=message, ...)
  }
)

# JSON appender in lgr
tf <- tempfile(tmpdir="D:/temp", fileext=".log")
lgr$add_appender(AppenderJson$new(tf), name = "json")

# Endpoint
app$add_get("/sqrt", function(request, response) {
  on.exit({
    # Next log file
    tf <- tempfile(tmpdir="D:/temp", fileext=".log")
    lgr$appenders$json$set_file(tf)
  })
  app$logger$info(msg="", context=list(request_id = request$id, message="Process start"))
  response$body = sqrt(x)
  app$logger$info(msg="", context=list(request_id = request$id, message="Process end"))
})

# Submit request
request = Request$new(path = "/sqrt", method = "GET", parameters_query = list(x = "10"))
response = app$process_request(request)

但这会将请求的日志信息分成两个文件。我也很确定它不能同时处理请求。

1 个答案:

答案 0 :(得分:1)

我相信您甚至不需要任何特殊的记录器-只需使用writeLines。同样,您可以依靠req$id来命名文件,因为它是唯一的。

library(RestRserve)

req = Request$new()
res = Response$new()

fl = file.path(tempdir(), paste0(req$id, ".log"))
con = file(fl, open = "at")
writeLines("Process start", con)
res$set_body(sqrt(10))
writeLines("Process end", con)
close(con)

readLines(fl)
unlink(fl)
相关问题