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