2009-02-19 200 views
1

我是全新的log4j,我似乎無法弄清楚這一點。如果我將log4j.configuration設置爲某個不存在的垃圾文件,那麼以下程序按我的預期工作。但是,如果我不這麼做,這是無聲的(比打印出的屬性等):log4j輸出抑制?

package com.example.test; 

import org.apache.log4j.*; 

public class Log4jExample2 { 
    final static Logger logger = Logger.getLogger("test.Log4jExample2");  

    static void kvshow(String[] karray) 
    { 
     for (String k : karray) 
     { 
      String v = System.getProperty(k); 
      System.out.println(k+"="+v); 
     } 
    } 

    public static void main(String[] args) { 
     kvshow(new String[] {"log4j.configuration", "log4j.properties"}); 
     BasicConfigurator.configure(); 
     logger.debug("Hello world."); 
    } 

} 

這裏有一個運行時會話:

>java -cp test-20090219.jar com.example.test.Log4jExample2 
log4j.configuration=null 
log4j.properties=null 

>java -cp test-20090219.jar -Dlog4j.configuration=blah.cfg com.example.test.Log4jExample2 
log4j.configuration=blah.cfg 
log4j.properties=null 
0 [main] DEBUG test.Log4jExample2 - Hello world. 

我難倒。 (同樣,沒有名爲blah.cfg的文件,這是我可以使用的最簡單的方法)log4j從哪裏獲得它的指示?

回答

1

嗯,我有一個鉛......我一直在尋找通過人工log4j的隨機試過這樣:

>java -Dlog4j.debug=true com.example.test.Log4jExample2 
log4j: Trying to find [log4j.xml] using context classloader [email protected] 
log4j: Trying to find [log4j.xml] using [email protected] class loader. 
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource(). 
log4j: Trying to find [log4j.properties] using context classloader [email protected] 
log4j: Using URL [jar:file:/C:/appl/Java/jre6u10/lib/ext/bsf.jar!/log4j.properties] for automatic log4j configuration. 
log4j: Reading configuration from URL jar:file:/C:/appl/Java/jre6u10/lib/ext/bsf.jar!/log4j.properties 
log4j: Parsing for [root] with value=[FATAL, CONSOLE]. 
log4j: Level token is [FATAL]. 
log4j: Category root set to FATAL 
log4j: Parsing appender named "CONSOLE". 
log4j: Parsing layout options for "CONSOLE". 
log4j: End of parsing for "CONSOLE". 
log4j: Parsed "CONSOLE" options. 
log4j: Finished configuring. 
log4j.configuration=null 
log4j.properties=null 

貌似Bean腳本框架覆蓋我。

我該如何解決這個問題?我想要的是,如果未使用屬性文件明確調用JRE,那麼我希望它使用包含在我的.jar文件中的設置。我試圖把我自己的log4j.properties文件放在我的.jar文件的根目錄下,但這似乎不起作用。

編輯:aha!我想我明白了:我第一次使用Logger.getLogger()之前,做一個System.setProperty,是這樣的:如果你是在抑制「無追加程序只是興趣

static 
{ 
    System.setProperty("log4j.configuration", 
    "jar:file:my_jar_file_name_here.jar!/log4j.properties");   
} 
0

BasicConfigurator設置Log4J的默認值。因此,當您使用BasicConfigurator時,不會從配置文件讀取數據。從屬性配置文件,使用PropertiesConfigurator

+0

不,你錯過了。我不想從配置文件讀取。我試圖運行BasicConfigurator的例子,並且有些東西壓制了我期望的日誌輸出。 – 2009-02-19 22:56:18

0

可以發現爲記錄器」的錯誤,你可以使你SRC文件夾中的新文件,稱它爲log4j.properties

#Set root logger level to DEBUG and its only appender to A1. 
    log4j.rootLogger=WARN, A1 
    #A1 is set to be a ConsoleAppender. 
    log4j.appender.A1=org.apache.log4j.ConsoleAppender 
    #A1 uses PatternLayout. 
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
    log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

然後將其保存填充它。

請注意,這只是簡單地抑制了上述錯誤。