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.