package nl.nn.adapterframework.extensions.log4j; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import nl.nn.adapterframework.util.Misc; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Appender; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.spi.AppenderAttachable; import org.apache.log4j.spi.LoggingEvent; /** * Extension of AppenderSkeleton with the facility to truncate all messages to a specified length. * * @author Peter Leeuwenburgh */ public class IbisAppenderWrapper extends AppenderSkeleton implements AppenderAttachable { protected int maxMessageLength = -1; protected String hideRegex; private final List<Appender> appenders = new ArrayList<Appender>(); public void close() { synchronized (appenders) { for (Appender appender : appenders) { appender.close(); } } } public boolean requiresLayout() { return false; } @Override protected void append(LoggingEvent event) { String modifiedMessage = event.getMessage().toString(); if (maxMessageLength >= 0 && modifiedMessage.length() > maxMessageLength) { modifiedMessage = modifiedMessage.substring(0, maxMessageLength) + "...(" + (modifiedMessage.length() - maxMessageLength) + " characters more)"; } if (StringUtils.isNotEmpty(hideRegex)) { modifiedMessage = Misc.hideAll(modifiedMessage, hideRegex); } LoggingEvent modifiedEvent = new LoggingEvent( event.getFQNOfLoggerClass(), event.getLogger(), event.getTimeStamp(), event.getLevel(), modifiedMessage, event.getThreadName(), event.getThrowableInformation(), event.getNDC(), event.getLocationInformation(), event.getProperties()); synchronized (appenders) { for (Appender appender : appenders) { appender.doAppend(modifiedEvent); } } } public void addAppender(Appender appender) { synchronized (appenders) { appenders.add(appender); } } public Enumeration getAllAppenders() { return Collections.enumeration(appenders); } public Appender getAppender(String name) { synchronized (appenders) { for (Appender appender : appenders) { if (appender.getName().equals(name)) { return appender; } } } return null; } public boolean isAttached(Appender appender) { synchronized (appenders) { for (Appender wrapped : appenders) { if (wrapped.equals(appender)) { return true; } } return false; } } public void removeAllAppenders() { synchronized (appenders) { appenders.clear(); } } public void removeAppender(Appender appender) { synchronized (appenders) { for (Iterator<Appender> i = appenders.iterator(); i.hasNext();) { if (i.next().equals(appender)) { i.remove(); } } } } public void removeAppender(String name) { synchronized (appenders) { for (Iterator<Appender> i = appenders.iterator(); i.hasNext();) { if (i.next().getName().equals(name)) { i.remove(); } } } } public void setMaxMessageLength(int maxMessageLength) { this.maxMessageLength = maxMessageLength; } public int getMaxMessageLength() { return maxMessageLength; } public String getHideRegex() { return hideRegex; } public void setHideRegex(String string) { hideRegex = string; } }