【问题标题】:Add logs in a R Plumber Api在 R Plumber Api 中添加日志
【发布时间】:2021-10-14 09:40:01
【问题描述】:

我正在使用RPlumber 创建一些API。我这样配置entrypoint.R

library(plumber)
library(logger)

# Create Log directory
log_dir <- "/api/logs"
if (!fs::dir_exists(log_dir)) fs::dir_create(log_dir)
log_appender(appender_tee(tempfile("plumber_", log_dir, ".log")))

convert_empty <- function(string) {
  if (string == "") {
    "-"
  } else {
    string
  }
}

# Initiate
# pr <- plumber::plumb(here::here('plumber.R')) # local test
pr <- plumber::plumb(rev(commandArgs())[1]) # via Docker


args <- list(host = '0.0.0.0', port = 8000)
if (packageVersion('plumber') >= '1.0.0') { pr$setDocs(TRUE) } else { args$swagger <- TRUE }


# Create log hook
pr$registerHooks(
  list(
    preroute = function() {
      # Start timer for log info
      tictoc::tic()
    },
    postroute = function(req, res) {
      end <- tictoc::toc(quiet = TRUE)
      # Log details about the request and the response
      # log_info('{convert_empty(req$REMOTE_ADDR)} "{convert_empty(req$HTTP_USER_AGENT)}" {convert_empty(req$HTTP_HOST)} {convert_empty(req$REQUEST_METHOD)} {convert_empty(req$PATH_INFO)} {convert_empty(res$status)} {round(end$toc - end$tic, digits = getOption("digits", 5))}')
      log_info('{convert_empty(req$REMOTE_ADDR)}')
    }
  )
)

# Run entrypoint
do.call(pr$run, args)

我不能有完整的日志,因为这条线

log_info('{convert_empty(req$REMOTE_ADDR)} "{convert_empty(req$HTTP_USER_AGENT)}" {convert_empty(req$HTTP_HOST)} {convert_empty(req$REQUEST_METHOD)} {convert_empty(req$PATH_INFO)} {convert_empty(res$status)} {round(end$toc - end$tic, digits = getOption("digits", 5))}')

产生一个错误,应用程序停止工作。

另外,我想在 API 中添加我的自定义日志以跟踪流以进行调试。例如在 api 中

#* Ping
#* @get /ping
function() {
    rtn <- jsonlite::unbox(data.frame(Status = TRUE))
    return(rtn)
}

我想添加我的日志,以便检查正在调用的函数以及它们中发生的情况。

【问题讨论】:

    标签: r plumber


    【解决方案1】:

    我找到了一个名为Log4R 的库,它允许我从我的函数中添加日志并将它们保存在一个文件中。同样的例子here

    安装包

    install.packages("log4r")
    

    使用包

    logger <- logger()
    
    info(logger, "Located nearest gas station.")
    #> INFO  [2019-09-04 16:31:04] Located nearest gas station.
    warn(logger, "Ez-Gas sensor network is not available.")
    #> WARN  [2019-09-04 16:31:04] Ez-Gas sensor network is not available.
    debug(logger, "Debug messages are suppressed by default.")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2017-11-21
      • 2021-01-21
      • 2022-01-25
      相关资源
      最近更新 更多