Learn R Programming

logger (version 0.2.2)

appender_async: Delays executing the actual appender function to the future in a background process to avoid blocking the main R session

Description

Delays executing the actual appender function to the future in a background process to avoid blocking the main R session

Usage

appender_async(
  appender,
  batch = 1,
  namespace = "async_logger",
  init = function() log_info("Background process started")
)

Value

function taking lines argument

Arguments

appender

a log_appender function with a generator attribute (TODO note not required, all fn will be passed if not)

batch

number of records to process from the queue at once

namespace

logger namespace to use for logging messages on starting up the background process

init

optional function to run in the background process that is useful to set up the environment required for logging, eg if the appender function requires some extra packages to be loaded or some environment variables to be set etc

See Also

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.

Examples

Run this code
if (FALSE) {
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()
}

Run the code above in your browser using DataLab