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).
This function is to be used with an actual log_appender
, for example appender_console
, appender_file
, appender_tee
, appender_pushbullet
, appender_telegram
, appender_syslog
or appender_kinesis
.
## 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.