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

3

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

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

1)我将日志输出到标准输出,但我不知道为什么。

2)尽管我已经尝试只将错误和更高级别的日志消息定向到错误日志,但我仍然在我的错误日志中获取所有日志消息。

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

3)此外,我无法让log4j.xml文件位于jar文件之外,以便我可以在运行时进行更改。我该如何做?

<!--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>


2
BasicConfigurator 使用一个 ConsoleAppender,将日志事件附加到 System.out - mre
1个回答

3
-Dlog4j.debug添加到应用程序的JVM参数中,以查看log4j正在做什么以及使用哪个配置文件。
您的问题是使用BasicConfigurer-为了使用名为log4j.xml的文件进行配置,您不需要在应用程序代码中使用任何显式的log4j Configurer,因为默认的log4j初始化逻辑将会启动从类路径中选择log4j.xml(如果未找到xml,则为log4j.properties)。
请参见log4j手册中的Default Initialization Procedure

啊,谢谢!我一直以为BasicConfigurator == 默认配置,但显然默认配置只是通过静态初始化实现的。 - mattx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接