package org.nextprot.api.commons.utils; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Layout; import org.apache.log4j.spi.LoggingEvent; /** * Log4j Appender for sending events to Splunk via Raw TCP * * @author Damien Dallimore damien@dtdsoftware.com * */ public class SplunkRawTCPAppender extends AppenderSkeleton { // connection settings private String host = "kant"; private int port = 5150; //queuing settings private String maxQueueSize; private boolean dropEventsOnQueueFull; private SplunkRawTCPInput sri; /** * Constructor */ public SplunkRawTCPAppender() { } /** * Constructor * * @param layout * the layout to apply to the log event */ public SplunkRawTCPAppender(Layout layout) { this.layout = layout; } /** * Log the message */ @Override protected void append(LoggingEvent event) { try { if (sri == null) { sri = new SplunkRawTCPInput(host, port); sri.setMaxQueueSize(maxQueueSize); sri.setDropEventsOnQueueFull(dropEventsOnQueueFull); } } catch (Exception e) { //e.printStackTrace(); errorHandler .error("Couldn't establish Raw TCP connection for SplunkRawTCPAppender named \"" + this.name + "\"."); return; } String formatted = layout.format(event); //send error stack traces to splunk if(layout.ignoresThrowable()) { String[] s = event.getThrowableStrRep(); StringBuilder stackTrace = new StringBuilder(); if (s != null) { int len = s.length; for(int i = 0; i < len; i++) { stackTrace.append(Layout.LINE_SEP); stackTrace.append(s[i]); } } formatted += stackTrace.toString(); } sri.streamEvent(formatted); } /** * Clean up resources */ @Override synchronized public void close() { closed = true; if (sri != null) { try { sri.closeStream(); sri = null; } catch (Exception e) { Thread.currentThread().interrupt(); sri = null; } } } @Override public boolean requiresLayout() { return true; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getMaxQueueSize() { return maxQueueSize; } public void setMaxQueueSize(String maxQueueSize) { this.maxQueueSize = maxQueueSize; } public boolean isDropEventsOnQueueFull() { return dropEventsOnQueueFull; } public void setDropEventsOnQueueFull(boolean dropEventsOnQueueFull) { this.dropEventsOnQueueFull = dropEventsOnQueueFull; } }