Voting: std.logger
Kevin Lamonte via Digitalmars-d
digitalmars-d at puremagic.com
Mon Sep 1 23:24:43 PDT 2014
On Monday, 1 September 2014 at 10:43:34 UTC, Ola Fosheim Grøstad
wrote:
> I guess the most robust solution is to use shared memory and
> fork, when the child dies you soup up the log and upload it to
> a logging-server.
I'm used to a centralized system taking logs on a continuous
basis, with "normal, I'm happy" messages coming through in a
regular interval. When the application dies, it already has had
its messages emitted and sucked up by the collection system, and
if its heartbeat messages aren't seen then people are prompted to
investigate anyway. It's on the main server (e.g. syslog or
LogStash) to handle storage space issues like log rotation.
> I am also interested in lazy formatting, meaning you log a
> reference to the immutable formatting string and the
> parameters, but wait with the formatting until the result is
> needed.
log4d does this, it saves the Logger+LogEntry references and only
applies PatternLayouts at the end, BUT it does so with the risk
that additional fields specified in the conversionPattern might
be wrong since they were not generated/evaluated in the context
of the original log call. Thread ID (%t) is the main culprit
(since it is not in LogEntry, PatternLayout has to get it), but
also time between log calls and time since application startup
(%r/%R).
But it sounds like you want std.logger to not apply formatting
even in its infof/errorf/etc functions. That might be a problem
for things like the number of rows in a result set, the current
time, or the remote system hostname. For example, by the time
the logging infrastructure evaluates the number of rows, the
result set is long gone and could throw an exception. I would
argue that this kind of lazy evaluation would be fine if it was
not enabled by default.
More information about the Digitalmars-d
mailing list