Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将消息、警告和错误捕获到R中的web api中_R_Rest_Logging_Console - Fatal编程技术网

将消息、警告和错误捕获到R中的web api中

将消息、警告和错误捕获到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遵循此问题的建

我正在开发一个主函数来调用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遵循此问题的建议:

现在,我可以使用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
功能。在现阶段,这可能不是一个大问题