Purpose of this document: Describe the changes in new futile.logger releases...
appender.file2
: Write log messages to a dynamically-named fileappender.graylog
: Write log messages to a Graylog2 HTTP GELF endpointappender.modulo
: Special meta appender that prints only when the internal counter mod n = 0appender.syslog
: Write log message to Linux syslog using the rsyslog::open_syslog()
function
New layout.*()
functions to support new logging output formats:
layout.graylog()
: Generate log messages in a Graylog2 HTTP GELF accetable format layout.simple.parallel()
Decorate log messages with a standard format and a pid (process ID from Sys.getpid()
)layout.colored()
: Decorate log messages with a standard format colored by log levellayout.glue()
: Decorate log messages with a standard format using glue instead of sprintf
New internal function prepare_arg()
to format variables in the logging output (passed in ...
to the flog.*()
functions
NEWS
file
(old release added for information purposes only without further known details)silent
in ftry()
to control if errors are rethrown or notlogger
for flog.info()
, flog.warn()
, flog.error()
, flog.fatal()
, flog.debug()
and flog.trace()
to use a predefined logger for higher through-put in heavy-logging scenarios (eg. flog.trace()
)id
in layout.*()
functions makes the logger name available in message formats via the ~i
("identifier") token.
Logger names are passed in the name
argument to flog.*()
logging functions.
The logging format is set via the flog.layout()
function.Example:
flog.layout(layout.format('~l [~t] <~i> ~m'), name = "ROOT") # set custom layout ROOT logger
flog.info("my log message", name="my logger name") # the logger name is now in the logging output
# > INFO [2021-11-04 16:23:38] <my logger name> my log message
logger
argument in flog.*()
functions look like breaking the API since it was not added at the end
and the semantics may have changed regarding the name
argument).
=> NO, IT ISN'T syntactically API-breaking since it follows AFTER the ...
argument and therefore always requires to use (position-independent) named arguments! Still: The semantics of the name
argument may have changed (check this!)Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.