2011-07-13 166 views
3

這是一個獨立的java應用程序。爲什麼log4j登錄到控制檯?

我正在使用下面的配置文件,有兩個問題。

1)我收到日誌到標準輸出,我不知道爲什麼。

2)我在我的錯誤日誌中獲得所有的日誌消息,即使我曾嘗試直接唯一的錯誤和更高的錯誤日誌。

我使用BasicConfigurator沒有指定到的log4j.xml文件的顯式路徑。 xml文件與我的類位於同一個jar文件中。除了這些問題之外,它正在創建並寫入適當的日誌,因此正在應用配置。

3)另外,我已經有罐子之外的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> 

+2

['BasicConfigurator'](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/BasicConfigurator.html#BasicConfigurator%28%29)使用['ConsoleAppender'](HTTP ://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/ConsoleAppender.html)將日誌事件追加到'System.out'中 – mre

回答

3

添加-Dlog4j.debug到應用程序的JVM參數傳遞給看看到底是什麼log4j的是做和配置文件,它使用。

您的問題是使用BasicConfigurer - 使用名爲log4j.xml的文件進行配置,因爲默認的log4j初始化邏輯將啓動log4j.xml(或log4j.properties,如果找不到xml)。

請參閱從log4j的手冊Default Initialization Procedure

+0

謝謝!我假設BasicConfigurator ==默認配置,但顯然默認情況是通過靜態初始化發生。 – mattx