3
votes

I have only two loggers defined : one is root logger and another one is common logger. I think then common logger becomes immediate child of root logger right? if yes, then how to prevent logs printed by common logger's appender to bubble up to root logger's appender?

according to docs :

However, if an ancestor of logger C say P, has the additivity flag set to false, then C's output will be directed to all the appenders in C and its ancestors upto and including P but not the appenders in any of the ancestors of P.

means the logger whose additivity is set to false will have all its logs to be bubbled up to its parent but not above that. Am i correct?

If yes then setting additivity flag of my common logger wouldn't help(in fact it doesn't :)) and the logs are still printed to both common and root logger. How to prevent this?

2
what server are you using?ZaoTaoBao
I am using Tomcat specifically tomcat 7Shailesh Vaishampayan
i can't help you...but maybe you can ask at serverFault. sorry.ZaoTaoBao

2 Answers

2
votes

with this config

<appender name="a2" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="common %m%n" />
    </layout>
</appender>
<appender name="a1" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="root %m%n" />
    </layout>
</appender>
<logger name="common" additivity="false">
    <appender-ref ref="a2" />
</logger>
<root>
    <priority value="debug" />
    <appender-ref ref="a1" />
</root>

this

Logger.getLogger("common").debug("1111");

prints

common 1111
4
votes
#root logger config starts
log4j.rootLogger=INFO, RA
log4j.appender.RA=org.apache.log4j.RollingFileAppender
log4j.appender.RA.File=/Data/var/logs/root.log
log4j.appender.RA.MaxFileSize=100KB
# Keep one backup file
log4j.appender.RA.MaxBackupIndex=1
log4j.appender.RA.layout=org.apache.log4j.PatternLayout
log4j.appender.RA.layout.ConversionPattern=%p %d - %m%n
# root config logger ends

#ico common logger config starts
log4j.logger.com=INFO, COMMONA
log4j.appender.COMMONA=org.apache.log4j.RollingFileAppender
log4j.additivity.com=false
log4j.appender.COMMONA.File=/Data/var/logs/common_ico.log
log4j.appender.COMMONA.MaxFileSize=100KB
# Keep one backup file
log4j.appender.COMMONA.MaxBackupIndex=1
log4j.appender.COMMONA.layout=org.apache.log4j.PatternLayout
log4j.appender.COMMONA.layout.ConversionPattern=[%x]%p %d - %m%n
#ico common logger config ends

Above config works. I was using log4j.additivity.COMMONA=false instead of log4j.additivity.com=false