Skip to content

Instantly share code, notes, and snippets.

@martiner
Created November 10, 2011 13:38
Show Gist options
  • Save martiner/1354866 to your computer and use it in GitHub Desktop.
Save martiner/1354866 to your computer and use it in GitHub Desktop.
Log4j separate logging
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER"
"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %m%n"/>
</layout>
</appender>
<logger name="filtered">
<level value="debug" />
</logger>
<root>
<priority value="debug"/>
<appender-ref ref="console"/>
</root>
</log4j:configuration>
import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.MDC;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;
import java.io.IOException;
public class Log4jFilteredLogging {
private static final String CONTEXT_KEY = "filteringContextKey";
private static final Logger log = Logger.getLogger("filtered");
public static void main(String[] args) throws Exception {
doJob("filtering1");
doJob("filtering2");
}
private static void doJob(String jobName) throws IOException {
prepareLog(jobName);
log.info(jobName + " - doJob");
}
private static void prepareLog(String name) throws IOException {
if (log.getAppender(name) == null) {
Appender app = new FileAppender(new PatternLayout(), "/tmp/" + name + ".log");
app.setName(name);
Filter filter = new MDCFilter(CONTEXT_KEY, name);
app.addFilter(filter);
log.addAppender(app);
}
MDC.put(CONTEXT_KEY, name);
}
private static class MDCFilter extends Filter {
private String key;
private String value;
private MDCFilter(String key, String value) {
this.key = key;
this.value = value;
}
@Override
public int decide(LoggingEvent event) {
Object value = MDC.get(key);
if (value != null && value.equals(this.value))
return Filter.ACCEPT;
return Filter.DENY;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment