log4j:如何在控制台中仅记录来自com.foo。*的消息?

时间:2010-10-26 18:08:33

标签: java xml log4j

在系统控制台中我只想记录来自com.foo.*的消息,而不记录来自我正在使用的外部库的消息com.bar.*

这就是我的所作所为:

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %p %c - %m%n" />
    </layout>
</appender>

<appender name="bar" class="org.apache.log4j.FileAppender">
    <param name="File" value="logs/bar.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %p %c - %m%n" />
    </layout>
</appender>

<logger name="com.foo">
    <level value="ALL" />
    <appender-ref ref="console"/>
</logger>

<logger name="com.bar">
    <level value="ALL" />
    <appender-ref ref="bar"/>
</logger>

<root>
    <level value="ALL" />
    <appender-ref ref="console" />
            <appender-ref ref="bar" />
</root>

问题是来自com.bar.*的日志消息仍显示在控制台中。

感谢。

2 个答案:

答案 0 :(得分:1)

如果您只想将 com.foo登录到控制台,那么我认为您可以从root用户中删除控制台appender引用以获得您想要的内容。

如果您想要阻止只有com.bar登录到控制台,那么我认为这样可行:

<logger name="com.foo">
    <level value="ALL" />
</logger>

<logger name="com.bar" additivity="false">
    <level value="ALL" />
    <appender-ref ref="bar"/>
</logger>

请记住,记录器默认情况下将可加性设置为true。见:http://veerasundar.com/blog/2009/08/log4j-tutorial-additivity-what-and-why/

答案 1 :(得分:0)

您始终可以将com.bar。*的级别设置为错误