Changes in version 0.4.2 (2026-05-10) Maintenance release: - Added appender_ntfy() to use {ntfy} as an appender (#240, @jonocarroll) - normalizePath() in the log_call_location() no longer triggers warning if the package source does not exist (#241, @maksymiuks) - Fix failing unit test on CRAN Changes in version 0.4.1 (2025-09-11) New features and quality of life improvements: - Support renaming meta fields (#217, @atusy) - Added log_elapsed() to show cumulative elapsed running time (#221, @thomasp85) - log_errors() gains a traceback argument that toggles whether the error traceback should be logged along with the message (fix #86 via #223, @thomasp85) - File and line location of the log call is now available to the layouts (fix #110 via #224, @thomasp85) - New formatter_cli() allows you to use the syntax from the cli package to create log messages (fix #210 via #225, @thomasp85) - New log_chunk_time() helper function to automatically log the execution time of knitr code chunks (fix #222 via #227, @thomasp85) - Allow user to overwrite the timestamp during logging if needed (fix #230, @thomasp85) Changes in version 0.4.0 (2024-10-22) A lot of internal code quality improvements and standardization, improved documentations, modernized tests, performance speedups. New features - logo 😻 (#196, @hadley) - computing metadata lazily, so various expensive computations are only performed if you actually add them to the log (#105, @hadley) - log_appender(), log_layout() and log_formatter() now check that you are calling them with a function, and return the previously set value (#170, @hadley) - new function to return number of log indices (#194, @WurmPeter) - appender_async is now using mirai instead of a custom background process and queue system (#214, @hadley @shikokuchuo) - layout_gha() for providing native GitHub Action logging. This automatically gets used when running code in github actions (@thomasp85) Fixes - eval scoping and lazy eval (#178, @hadley) Housekeeping - update pkgdown site to Bootstrap 5 and related revamp, e.g. reference index and run/show examples (#159 #165 #193, @hadley) - roxygen updated to use markdown, general cleanup (#160 #161 #191 #201, @hadley) - testing improvements, e.g. move to testthat v3 and snapshots, syntactic sugar (#163 #167 #168 #169 #171 #192, @hadley) - README tweaks (#162 #176, @hadley) - modernize GitHub Actions (#171, @hadley) - drop support for R versions below 4.0.0 (#177, @hadley) - internal function tweaks (#181 #187 #197, @hadley) - restyle sources (#185 #186 #191 #199, @daroczig and @hadley) Changes in version 0.3.0 (2024-03-05) Many unrelated small features, fixes and documentation updates collected over 2+ years. New features - update log_* functions to invisibly return the formatted log message and record (#26, @r2evans) - add namespace argument to log_shiny_input_changes (#93, @kpagacz) - optionally suppress messages in globalCallingHandlers after being logged (#100, @DanChaltiel) - as.loglevel helper to convert string/number to loglevel (requested by @tentacles-from-outer-space) - new formatter function: formatter_glue_safe (#126, @terashim) - support OFF log level (#138, @pawelru) - override default INFO log level via env var (#145, requested by sellorm) Fixes - handle zero-length messages in formatter_glue_or_sprintf (#74, @deeenes) - generalize log_separator to work with all layout functions (#96, @Polkas) - support log levels in log_shiny_input_changes (#103, @taekeharkema) - fix fn name lookup/reference with nested calls (#120, reported by @averissimo) - force the file argument of appender_tee (#124, reported by @dbontemps) - don't allow stacking logger hooks on messages/warnings/errors (reported by @jkeuskamp) - improve fragile test case when Hmisc loaded (#131, @r2evans) - pass index, namespace etc from log_ functions down to log_level (#143, @MichaelChirico) - refer to the caller function in global message logger hooks (#146, reported by @gabesolomon10) Changes in version 0.2.2 (2021-10-19) Maintenance release: - fix unbalanced code chunk delimiters in vignette (yihui/knitr#2057) Changes in version 0.2.1 (2021-07-06) Maintenance release: - update appender_slack to use slackr_msg instead of text_slackr Changes in version 0.2.0 (2021-03-04) Breaking changes - appender_console writes to stderr by default instead of stdout (#28) Fixes - default date format in glue layouts (#44, @burgikukac) - fn reference in loggers will not to a Cartesian join on the log lines and message, but merge (and clean up) the fn even for large anonymous functions (#20) New features - allow defining the log level threshold as a string (#13, @artemklevtsov) - allow updating the log level threshold, formatter, layout and appender in all namespaces with a single call (#50) - new argument to appender_file to optionally truncate before appending (#24, @eddelbuettel) - new arguments to appender_file to optionally rotate the log files after appending (#42) - new meta variables for logging in custom layouts: R version and calling package's version - improved performance by not evaluating arguments when the log record does not meet the log level threshold (#27, @jozefhajnala) - logger in now part of the Mikata Project: https://mikata.dev New helper functions - %except%: evaluate an expression with fallback - log_separator: logging with separator lines (#16) - log_tictoc: tic-toc logging (#16, @nfultz) - log_failure: log error before failing (#19, @amy17519) - log_messages, log_warnings, log_errors: optionally auto-log messages, warnings and errors using globalCallingHandlers on R 4.0.0 and above, and injecting logger calls to message, warnings and stop below R 4.0.0 - log_shiny_input_changes: auto-log input changes in Shiny apps (#25) New formatter functions - layout_pander: transform R objects into markdown before logging (#22) New layout functions - layout_blank: blank log messages without any modification - layout_json_parser: render the layout as a JSON blob after merging with requested meta fields New appender functions - appender_telegram: deliver log records to Telegram (#14, @artemklevtsov) - appender_syslog: deliver log records to syslog (#30, @atheriel) - appender_kinesis: deliver log records to Amazon Kinesis (#35) - appender_async: wrapper function for other appender functions to deliver log records in a background process asynchronously without blocking the master process (#35) Changes in version 0.1 (2019-01-02) Initial CRAN release after collecting feedback for a month on Twitter at https://twitter.com/daroczig/status/1067461632677330944: - finalized design of a log request defined by - a log level threshold, - a formatter function preparing the log message, - a layout function rendering the actual log records and - an appender function delivering to the log destination - detailed documentation with 7 vignettes and a lot of examples, even some benchmarks - ~75% code coverage for unit tests - 5 formatter functions mostly using paste, sprintf and glue - 6 layout functions with convenient wrappers to let users define custom layouts via glue or JSON, including colorized output - 5 appender functions delivering log records to the console, files, Pushbullet and Slack - helper function to evaluate an expressions with auto-logging both the expression and its result - helper function to temporarily update the log level threshold - helper function to skip running the formatter function on a log message - mostly backward compatibly with the logging and futile.logger packages