log4j.additivity 是 子Logger 是否继承父Logger 的 输出源(appender)的标志位。具体说,默认情况下,子Logger 会继承父Logger 的appender,也就是说 子Logger 会在父Logger 的appender里输出。若是additivity设为false,则子Logger 只会在自己的appender里输出,而不会在父Logger 的appender里输出。
(来自http://www.wenhq.com/article/view_414.html)
log在输出时,会先去找本身的appender,可以debug进入Category.callAppenders(LoggingEvent event),如果设置additive就会跳出循环。
for(Category c = this; c != null; c=c.parent) {
// Protected against simultaneous call to addAppender, removeAppender,...
synchronized(c) {
if(c.aai != null) {
writes += c.aai.appendLoopOnAppenders(event);
}
if(!c.additive) {
break;
}
}
}
例子如下:
Logger log = Logger.getLogger("test");
log.setAdditivity(false);