package uk.co.appembassy.log4mqtt; import org.apache.log4j.Layout; import org.apache.log4j.spi.LoggingEvent; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Iterator; /** * Created with IntelliJ IDEA. * User: rad * Date: 29/09/2012 * Time: 14:25 * To change this template use File | Settings | File Templates. */ public class XmlLoggingEventLayout extends Layout { private String hostname; private String ip; public void activateOptions() { try { hostname = InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException ex) { hostname = "<unknown>"; } try { ip = InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException ex) { ip = "<unknown>"; } } public boolean ignoresThrowable() { return true; } public String format(LoggingEvent event) { StringBuilder xml = new StringBuilder(); xml.append("<?xml version=\"1.0\"?><event>"); xml.append("<hostname>" + hostname + "</hostname>"); xml.append("<ip>" + ip + "</ip>"); xml.append("<timestamp>" + event.getTimeStamp() + "</timestamp>"); xml.append("<error_level_string><![CDATA[" + event.getLevel().toString() + "]]></error_level_string>"); xml.append("<error_level_code>" + event.getLevel().toInt() + "</error_level_code>"); xml.append("<message><![CDATA[" + event.getMessage().toString().replaceAll("\"", "\\\\\"") + "]]></message>"); xml.append("<fqn><![CDATA[" + event.getFQNOfLoggerClass().replaceAll("\"", "\\\\\"") + "]]></fqn>"); xml.append("<logger_name><![CDATA[" + event.getLoggerName().replaceAll("\"", "\\\\\"") + "]]></logger_name>"); if ( event.getNDC() != null ) { xml.append("<ndc><![CDATA[" + event.getNDC().replaceAll("\"", "\\\\\"") + "]]></ndc>"); } if ( event.getRenderedMessage() != null ) { xml.append("<rendered_message><![CDATA[" + event.getRenderedMessage().replaceAll("\"", "\\\\\"") + "]]></rendered_message>"); } if (event.locationInformationExists()) { xml.append("<location_info><![CDATA[" + event.getLocationInformation().fullInfo.replaceAll("\"", "\\\\\"") + "]]></location_info>"); } if ( event.getThreadName() != null ) { xml.append("<thread_name><![CDATA[" + event.getThreadName().replaceAll("\"", "\\\\\"") + "]]></thread_name>"); } if ( event.getThrowableStrRep() != null ) { String[] throwable = event.getThrowableStrRep(); if ( throwable.length > 0 ) { xml.append("<throwable>"); for ( int i=0; i<throwable.length; i++ ) { xml.append("<"+i+"><![CDATA[" + throwable[i].replaceAll("\"", "\\\\\"") + "]]></"+i+">"); } xml.append("</throwable>"); } } if ( event.getProperties() != null && event.getProperties().size() > 0 ) { xml.append("<properties>"); Iterator<String> iter = event.getProperties().keySet().iterator(); int c = 0; while (iter.hasNext()) { String key = iter.next(); xml.append("<"+key.replaceAll("\"", "\\\\\"")+">"); xml.append("<![CDATA[" + event.getProperty(key).replaceAll("\"", "\\\\\"") + "]]>"); xml.append("</"+key.replaceAll("\"", "\\\\\"")+">"); } xml.append("</properties>"); } xml.append("</event>"); return xml.toString(); } }