Reputation: 185
I am writing a custom socket appender for Log4J which attaches itself at runtime. The code i have so far is as below,
Logger rootLogger = Logger.getRootLogger();
SocketAppender socketAppender = new SocketAppender(server, port);
socketAppender.setReconnectionDelay(60000);
socketAppender.setThreshold(Level.DEBUG);
socketAppender.setName("server-socket");
rootLogger.addAppender(socketAppender);
where server & port is defined properly. I am using Struts2, so i get a log of useless logs (for me) from classes like freemarker.beans and freemarker.cache. How do I filter these classes from logging into Socket Appender above?
I tried using Filters, but it does not seem to work. If someone can point me in the right direction, it would be very helpful. Cheers!
Upvotes: 1
Views: 826
Reputation: 185
Well.. I found the answer.. I was implementing the Filter classes wrongly. Instead of DENY, I was sending out NEUTRAL. The below code works fine for me now,
SocketAppender socketAppender = new SocketAppender(server, port);
socketAppender.setReconnectionDelay(60000);
socketAppender.setThreshold(Level.DEBUG);
socketAppender.setName("server-socket");
socketAppender.addFilter(new Filter() {
@Override
public int decide(LoggingEvent loggingEvent)
{
if(ignoreLogsFromClasses.contains(loggingEvent.categoryName))
{
return -1;
}
return 0;
}
});
rootLogger.addAppender(socketAppender);
where ignoreLogsFromClasses is an Set which contains classes to be ignored.
Upvotes: 1