r - 使用 RestRserve 将每个请求记录到单独的 json 文件
问题描述
如何设置将每个请求记录到不同的 json 文件RestRserve
?
我尝试使用该lgr
包(在RestRserve 的日志记录文档中提到),如下所示:
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)
但这会将请求的日志信息拆分为两个文件。我也很确定它不适用于同时请求。
解决方案
我相信您甚至不需要任何特殊的记录器 - 只需使用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)
推荐阅读
- angular - 当我在 Quagga.onDetected 中调用函数时,显示错误“无法读取未定义的属性‘searchbybarcode’”
- chromium - 在 WebOS 上对铬进行捏合缩放时如何避免缩放全屏
- android - Mapbox 导航提供 stange 增强的位置时间戳
- javascript - 使用 Vue 3 将 SCSS 样式应用于全局 SCSS 文件中的正文元素
- typescript - 如何使用 mocha 对库依赖类进行单元测试
- django - 执行 Cloud Build 并连接到 Cloud SQL 时出错
- python - 制作:ifort:找不到命令?
- python - 为什么我的 python 代码跳过第一行并从第二行开始进行更改
- php - 如何在php中的特定单词中添加特定字母
- ios - 快速复杂的轮播