Java 为什么log4j要记录到控制台?

Java 为什么log4j要记录到控制台?,java,log4j,Java,Log4j,这是一个独立的java应用程序 我正在使用下面的配置文件,有两个问题 1) 我正在把日志拿到stdout,我不知道为什么 2) 我在错误日志中获取所有日志消息,即使我已尝试仅将错误和更高级别的消息指向错误日志 我使用BasicConfiguration时没有指定log4j.xml文件的显式路径。xml文件与我的类位于同一个jar中。除了这些问题之外,它还在创建并写入相应的日志,因此正在应用配置 3) 此外,我没有幸将log4j.xml文件放在jar之外,以便在运行时更改它。我该怎么做 <!

这是一个独立的java应用程序

我正在使用下面的配置文件,有两个问题

1) 我正在把日志拿到stdout,我不知道为什么

2) 我在错误日志中获取所有日志消息,即使我已尝试仅将错误和更高级别的消息指向错误日志

我使用BasicConfiguration时没有指定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>



-Dlog4j.debug
添加到应用程序的JVM参数中,以查看log4j正在做什么以及它使用的配置文件

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


请参阅log4j手册。

使用将日志事件附加到
系统中的。out
啊,谢谢!我假设BasicConfigurator==默认配置,但显然默认配置只是通过静态初始化实现的。