[Telepathy] thinking about a new log format for telepathy-logger
Danielle Madeley
danielle.madeley at collabora.co.uk
Sun Mar 14 18:10:11 PDT 2010
So Telepathy Logger currently logs things in something not unlike
Empathy's XML log format. Although XML has some advantages (like being
able to generate logs using XSL), it seems fairly sub-optimal for the
efficient storage of logs.
I've been thinking (and playing) with some ideas for how to replace
this, and am looking for feedback/ideas.
Solution #1: serialising binary structs
This is where we serialise a fixed struct directly into the
file. Something like:
[danni at adelie log-backend]$ xxd test
0000000: 0000 0060 0000 0000 4b9d 7725 0000 0003 ...`....K.w
%....
0000010: 0000 0020 6461 6e69 656c 6c65 2e6d 6164 ...
danielle.mad
0000020: 656c 6579 4063 6f6c 6c61 626f 7261 2e63
eley at collabora.c
This message is formatted (guint32 entry-length)(gint64
timestamp)(guint32 flags)((guint32 string-length)(string id)).
Not really a fan of doing this, because it makes it quite
difficult to extend later on (especially to non-text messages).
Solution #2: binary tag-based thing (similar to Apple DMAP)
This is also a binary format, but a tag based one where there is
a table of tags, where each tag has a length and a data type
(that type can be Container). Unpacked it might look something
like this:
(Format TAG length ..data..)
LOGM 139
NAME 16 "Danielle Madeley"
IDXX 32 "danielle.madeley at collabora.co.uk"
TIME 8 1268610853
FLAG 4 0x3
MESG 39 "This is a message that is 39 bytes long"
Types:
LOGM container "Log Message"
NAME string "Name"
IDXX string "Id"
TIME gint64 "Timestamp"
FLAG guint32 "Flags"
MESG string "Message"
Packs something like this (exciting intermix of ascii and hex):
LO GM 008B NA ME 0010 Da ni el le _M ad el ey ID XX 0020 da ni
el le .m ad el ey @c ol la bo ra .c o. uk TI ME 0008 0000 0000
4B9D 7725
I kind of like this format because it's compact and extensible.
It's quick to jump from container to container. However it's
still very custom.
Solution #3: EXI or similar
Basically use some binary XML format. This is more or less a
formalisation of the system proposed above. The question is
which format? They all seem incredibly overengineered for our
purposes.
Solution #4: sqlite
Store each message as an SQLite row. Great for searching,
probably won't scale?
Thoughts?
--danielle
--
Danielle Madeley
Software Developer, Collabora Ltd. Melbourne, Australia
www.collabora.co.uk
More information about the telepathy
mailing list