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