This is a small bugfix release for CRAN’s sake that fixes two tests that would sporadically fail; they relied on timestamps being equivalent between want
and got
invocations.
Add sanitizer
argument to loggit()
, and an unsanitizer
argument to read_logs()
. loggit
chooses to reimplement basic JSON parsing funcitonality instead of requiring a more full-featured external JSON library like jsonlite
. This reimplementation is string-pattern-based, and not based on a more formal specification of JSON using an AST. As such, it isn’t brittle, per se, but it is weak to invalid JSON characters such as embedded newlines, curly braces, double-quotes, some occurrences of commas or colons, and the like.
Sanitizers are functions allow for custom replacements of invalid (nd)JSON characters in the submitted log data. Unsanitizer functions perform the opposite action: replacing sanitized output with their original values when read back inttohe R session. If not provided, loggit()
and read_logs()
will invoke the default sanitizer table, which (currently) maps string replacements as follows:
Character | Replacement in log file |
---|---|
{ |
__LEFTBRACE__ |
} |
__RIGHTBRACE__ |
" |
__DBLQUOTE__ |
, |
__COMMA__ |
\r |
__CR__ |
\n |
__LF__ |
Users may specify their own (un)sanitizers as functions that take & return single strings, though they are regardless encouraged to not include invalid characters in the logs in the first place. Please refer to the documentation for more details.
Removed log_format
from read_ndjson()
, because that was silly.
Removed some erroneous functions as exports in the NAMESPACE
.
Change behavior of handler masks to respect multiple arguments. Achieved by changing explicit list indexing to paste(..., collapse = "")
(#12).
Remove loggit::stopifnot
tests, since stopifnot()
is not provided as a handler mask by this package (stopifnot()
has no custom messaging mechanic to log).
loggit()
now logs explicitly to ndjson
-formatted log files. This is handled internally by the write_ndjson()
function. Each log entry is self-contained on its own line, as its own JSON object. Previously, the log files were each a single JSON array, with JSON objects as the elements. This change provides several benefits over the old way of logging.
Please note that this change means that log entries should not contain any embedded newline characters (\r
, \n
, or \r\n
), as this will break the logging format of the file. Your logs will still be written (with a base::warning
), but parsing the data with external tools or the included read_logs()
function may not behave correctly. loggit
could one day enforce these content rules internally, but the decision for now is to stay out of the way of the user code generating the logs, and put the onus of correction on the developer.
Note that despite the significant backend behavioral changes presented here, the user-facing API for this package has changed very little (documented below).
Remove dplyr
and jsonlite
from Imports
. This makes loggit
entirely free from external dependencies.
Added rotate_logs()
, which rotates the log file on disk based on its line count. This is not an automated process, as depending on the size of your log file, this could cause performance degradation if called on every nth write. See function docs for more details.
Added two vignettes: Getting Started, and Data Validation.
get_logs()
was renamed to read_logs()
.
Removed log_detail
as an explicit argument to loggit()
. This is a non-breaking change, since loggit()
will still pick up and log that field if provided, but it is no longer a formal argument.
loggit()
no longer complains that a persistent log file is not set, and instead relies on the user to take note of the logfile’s location in the assigned tempdir. This can be avoided entirely by setting the log file explicitly at runtime, as has always been the case.
All configuration set
and get
functions are all now in snake-case, e.g. set_logfile()
instead of setLogFile()
.
set_timestamp_format()
now defaults to ISO-8601 time format, i.e. YYYY-MM-DDTHH:MM:SS+z
. The function itself still provides no means to set a timezone, and this is deliberate. This ensures that all software on the host reports identical timezone data by default.
Removed package startup message; the previous message would have broken formatting consistency if capturing logs via stdout
/stderr
.
Automatically coerce any entries for ‘log_lvl’ and ‘log_msg’ fields to be character.
(Github-only): loggit() no longer allows for a data frame to be passed as an argument; the underlying code was not writen very well, and I got ahead of myself in throwing it in there. loggit() is, however, still vectorized by nature, so users can still pass vectors to, for example, the log_detail argument, and values will be recycled according to R’s usual recycling rules.
Add get_logs(), which returns a data frame of a provided log file. Returns the current log file by default.
(Github-only): loggit() now allows for a data frame to be passed as the sole argument, and have its results be logged. Required column names are the same as the first two arguments to loggit(): “log_lvl” and “log_msg”. Any additional number of columns can be supplied.