appender_async | R Documentation |
Delays executing the actual appender function to the future in a background process to avoid blocking the main R session
appender_async(
appender,
batch = 1,
namespace = "async_logger",
init = function() log_info("Background process started")
)
appender |
a |
batch |
number of records to process from the queue at once |
namespace |
|
init |
optional function to run in the background process that
is useful to set up the environment required for logging, eg if
the |
function taking lines
argument
This functionality depends on the txtq and callr packages. The R session's temp folder is used for staging files (message queue and other forms of communication between the parent and child processes).
Other log_appenders
:
appender_console()
,
appender_file()
,
appender_kinesis()
,
appender_pushbullet()
,
appender_slack()
,
appender_stdout()
,
appender_syslog()
,
appender_tee()
,
appender_telegram()
## Not run:
appender_file_slow <- function(file) {
force(file)
function(lines) {
Sys.sleep(1)
cat(lines, sep = "\n", file = file, append = TRUE)
}
}
## log what's happening in the background
log_threshold(TRACE, namespace = "async_logger")
log_appender(appender_console, namespace = "async_logger")
## start async appender
t <- tempfile()
log_info("Logging in the background to {t}")
my_appender <- appender_async(appender_file_slow(file = t))
## use async appender
log_appender(my_appender)
log_info("Was this slow?")
system.time(for (i in 1:25) log_info(i))
readLines(t)
Sys.sleep(10)
readLines(t)
## check on the async appender (debugging, you will probably never need this)
attr(my_appender, "async_writer_queue")$count()
attr(my_appender, "async_writer_queue")$log()
attr(my_appender, "async_writer_process")$get_pid()
attr(my_appender, "async_writer_process")$get_state()
attr(my_appender, "async_writer_process")$poll_process(1)
attr(my_appender, "async_writer_process")$read()
attr(my_appender, "async_writer_process")$is_alive()
attr(my_appender, "async_writer_process")$read_error()
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.