将消息、警告和错误捕获到R中的web api中
我正在开发一个主函数来调用R中的其他脚本/函数,并希望将所有输出(即打印、cat、消息、停止)捕获到一个web API中(例如RESTAPI with POST方法)。一些虚拟代码来演示我的想法将消息、警告和错误捕获到R中的web api中,r,rest,logging,console,R,Rest,Logging,Console,我正在开发一个主函数来调用R中的其他脚本/函数,并希望将所有输出(即打印、cat、消息、停止)捕获到一个web API中(例如RESTAPI with POST方法)。一些虚拟代码来演示我的想法 url <- "https://example.com/api/log" capture.output({ print("print") cat("cat") message("message") stop("stop") }, file=url) url遵循此问题的建
url <- "https://example.com/api/log"
capture.output({
print("print")
cat("cat")
message("message")
stop("stop")
}, file=url)
url遵循此问题的建议:
现在,我可以使用tryCatch捕获消息、警告和错误,并将日志类型和时间存储在列表中
factory <- function(fun) {
function(...) {
warn <- err <- msg <- NULL
res <- withCallingHandlers(
tryCatch(fun(...), error=function(e) {
new_e <- err
new_e[[length(new_e) + 1]] <- list(time = Sys.time(),
type = "error",
log = conditionMessage(e))
err <<- new_e
NULL
}), warning=function(w) {
new_w <- warn
new_w[[length(new_w) + 1]] <- list(time = Sys.time(),
type = "warning",
log = conditionMessage(w))
warn <<- new_w
invokeRestart("muffleWarning")
}, message = function(m) {
new_w <- msg
new_w[[length(new_w) + 1]] <- list(time = Sys.time(),
type = "message",
log = conditionMessage(m))
msg <<- new_w
invokeRestart("muffleMessage")
})
list(res, warn=warn, err=err, msg=msg)
}
}
test <- function(){
print("AAAAAAA")
message("BBBBBB")
print("CCCC")
warning("DDDDDDDDDDD")
Sys.sleep(1)
warning("EEEEEEEEEEEEEEE")
#stop("FFFFFFFFFFFFF")
warning("GGGGGGGGGGGGGG")
return(NULL)
}
a <- factory(test)()
在下一步中,我可以使用httr函数调用RESTAPI将日志存储在数据库中。或者,当通过更新工厂功能生成消息时,可以将消息直接存储到数据库中
唯一的问题是该函数无法捕获打印
和猫
。但是,此问题建议消息
功能优于打印
和cat
功能。在现阶段,这可能不是一个大问题 遵循此问题的建议:
现在,我可以使用tryCatch捕获消息、警告和错误,并将日志类型和时间存储在列表中
factory <- function(fun) {
function(...) {
warn <- err <- msg <- NULL
res <- withCallingHandlers(
tryCatch(fun(...), error=function(e) {
new_e <- err
new_e[[length(new_e) + 1]] <- list(time = Sys.time(),
type = "error",
log = conditionMessage(e))
err <<- new_e
NULL
}), warning=function(w) {
new_w <- warn
new_w[[length(new_w) + 1]] <- list(time = Sys.time(),
type = "warning",
log = conditionMessage(w))
warn <<- new_w
invokeRestart("muffleWarning")
}, message = function(m) {
new_w <- msg
new_w[[length(new_w) + 1]] <- list(time = Sys.time(),
type = "message",
log = conditionMessage(m))
msg <<- new_w
invokeRestart("muffleMessage")
})
list(res, warn=warn, err=err, msg=msg)
}
}
test <- function(){
print("AAAAAAA")
message("BBBBBB")
print("CCCC")
warning("DDDDDDDDDDD")
Sys.sleep(1)
warning("EEEEEEEEEEEEEEE")
#stop("FFFFFFFFFFFFF")
warning("GGGGGGGGGGGGGG")
return(NULL)
}
a <- factory(test)()
在下一步中,我可以使用httr函数调用RESTAPI将日志存储在数据库中。或者,当通过更新工厂功能生成消息时,可以将消息直接存储到数据库中
唯一的问题是该函数无法捕获打印
和猫
。但是,此问题建议消息
功能优于打印
和cat
功能。在现阶段,这可能不是一个大问题