为什么log4j会登录到控制台?

时间:2011-07-13 15:21:09

标签: java log4j

这是一个独立的Java应用程序。

我正在使用下面的配置文件并遇到两个问题。

1)我收到了stdout的日志,我不知道为什么。

2)我在错误日志中收到所有日志消息,即使我试图仅将错误和更高的错误指向错误日志。

我正在使用BasicConfigurator而没有指定log4j.xml文件的显式路径。 xml文件与我的类在同一个jar中。除了这些问题之外,还在创建和写入相应的日志,因此正在应用配置。

3)另外,我没有运气在jar之外的log4j.xml文件,所以我可以在运行时更改它。我该怎么做?

<!--appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    <param name="Threshold" value="DEBUG"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p [%F:%L] - %m%n"/>
    </layout>
</appender-->

<!-- working dir is $CATALINA_TMPDIR. send logs to log dir. -->
<appender name="ROLL" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/var/log/company/application.log"/>
    <param name="MaxFileSize" value="5MB"/>
    <param name="MaxBackupIndex" value="9"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
    </layout>
</appender>

<appender name="ERRORLOG" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/var/log/rocketvox/company/error.log"/>
    <param name="MaxFileSize" value="5MB"/>
    <param name="MaxBackupIndex" value="9"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
    </layout>
</appender>

<category name="com.company">
    <priority value="ALL"/>
    <appender-ref ref="ROLL"/>
</category>

<category name="com.mattx">
    <priority value="ALL"/>
    <appender-ref ref="ROLL"/>
</category>

<root>
    <priority value="error"/>
    <appender-ref ref="ERRORLOG"/>
</root>

1 个答案:

答案 0 :(得分:3)

-Dlog4j.debug添加到应用程序的JVM args,以确切了解log4j正在做什么以及它使用哪个配置文件。

您的问题是使用BasicConfigurer - 使用名为log4j.xml的文件进行配置,您不需要在应用程序代码中使用任何显式的log4j配置程序,因为默认的log4j初始化逻辑将启动以选择log4j。从类路径中找到xml(或log4j.properties,如果没有找到xml)。

请参阅log4j手册中的Default Initialization Procedure