12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
|
/*******************************************************************************
copyright: Copyright (c) 2004 Kris Bell. All rights reserved
license: BSD style: $(LICENSE)
version: Initial release: May 2004
author: Kris
*******************************************************************************/
module tango.util.log.LayoutChainsaw;
private import tango.core.Thread;
private import tango.util.log.Log;
/*******************************************************************************
A layout with XML output conforming to Log4J specs.
*******************************************************************************/
public class LayoutChainsaw : Appender.Layout
{
/***********************************************************************
Subclasses should implement this method to perform the
formatting of the actual message content.
***********************************************************************/
void format (LogEvent event, scope size_t delegate(const(void)[]) dg)
{
char[20] tmp;
const(char)[] threadName;
threadName = Thread.getThis().name;
if (threadName.length is 0)
threadName = "{unknown}";
dg ("<log4j:event logger=\"");
dg (event.name);
dg ("\" timestamp=\"");
dg (event.toMilli (tmp, event.time.span));
dg ("\" level=\"");
dg (event.levelName);
dg ("\" thread=\"");
dg (threadName);
dg ("\">\r\n<log4j:message><![CDATA[");
dg (event.toString());
dg ("]]></log4j:message>\r\n<log4j:properties><log4j:data name=\"application\" value=\"");
dg (event.host.name);
dg ("\"/><log4j:data name=\"hostname\" value=\"");
dg (event.host.address);
dg ("\"/></log4j:properties></log4j:event>\r\n");
}
}
|