[slf4j-user] Best practice for logging XML and other byte oriented formats with slf4j?

Thorbjoern Ravn Andersen ravn at runjva.com
Thu Nov 19 19:06:17 CET 2009


Hi.

We have reached a situation where I basically want to log a data 
structure in order to be able to process it later.

After a bit of pondering, I have concluded that the best approach for us 
to do this would be to use the XMLEncoder/XMLDecoder in Java 1.4+ and 
log the generated XML snippets.

The issue I want to solve is that the XMLEncoder writes an UTF-8 encoded 
XML file to an OutputStream, i.e. a byte oriented destination.  To the 
best of my knowledge the slf4j backends all deal with Strings, i.e. 
character oriented destinations and the output files are written in the 
default encoding for the platform.

The question now is, what is the best way to handle the OutputStream 
generated by XMLEncoder so it will survive all attempts to mess up any 
unicode characters inside due to encoding differences on the way.  I 
will be using a custom layout anyway so much can be done :)  A humanly 
readable transport format will be preferred.

My current thoughts is to use a ByteArrayOutputStream and generate a 
String using the UTF-8 decoding.  The resulting string contains a <?xml 
... encoding="UTF-8"?> which is stripped resulting in an XML String 
containing Unicode chars (instead of encoded bytes).  This can then be 
flattened to an ASCII version, by converting all characters outside 
32..127 to their numeric entity (&#1234;), and THAT can be safely 
logged.  I guess :)

I'd appreciate comments on my thoughts, as this is a rather important 
intermediate step in us using log files to store information which can 
be used to simulate an external system when replaying an interesting sesion.


-- 
  Thorbjørn Ravn Andersen  "...plus... Tubular Bells!"




More information about the slf4j-user mailing list