Structured logging (was Early review of std.logger)
ilya-stromberg
ilya-stromberg-2009 at yandex.ru
Fri Oct 18 08:29:07 PDT 2013
On Tuesday, 15 October 2013 at 15:21:52 UTC, Johannes Pfau wrote:
> I think one increasingly important point for std.log is
> 'structured
> logging'.
>
> Structured logging is basically not simply logging textual
> messages, but
> also logging additional KEY/VALUE pairs of data. The idea is
> that logs
> should not only be readable by humans but also easy to parse and
> analyze. Structured logging often also includes UUIDs to
> simplify
> finding similar errors/problems in a log file.
>
> For example: Instead of logging
> logf("Couldn't login as %s on server %s : Reason: %s", user,
> server,
> errorCode);
>
> we'd do:
> log(LOGIN_FAILED_UUID, "Couldn't log in", ["User": user,
> "Server":
> server, "ErrorCode": errorCode]);
>
> The log can then be queried for all events with
> 'LOGIN_FAILED_UUID'
> uuid, Server="..." ErrorCode=42, etc.
+1
I like the idea of structured logging.
I really need to log some complex data, not only string. I
usually use `to!string(value)` to convert complex data to string.
About syntax - we can use something like this:
log!(user, server, errorCode)(LOGIN_FAILED_UUID, "Couldn't log
in");
user, server and errorCode is variables passed to template. We
can get variable value as usually and variable name via
`__traits(identifier, variable)`, it should work after DMD 2.064.
For example, Vide.d use this idea, see `render` function:
http://vibed.org/docs
We can store complex data as string via `to!string(value)` cast
until we can use real backend implementation like SystemDs.
More information about the Digitalmars-d
mailing list