2012-07-20 106 views
4

這是我的學生用於測試log4j的類。Log4j運行jar文件時不會創建日誌

public class Student{  
    private static final Logger logger = Logger.getLogger(Student.class.getName()); 

    public Student() { 
     PropertyConfigurator.configure("log4j.properties"); 
    } 

    public static void main(String args[]){ 
     logger.log(Level.INFO, "My log4j Test");  
    } 
} 

這是我log4j.properties文件

log4j.rootLogger=INFO,Appender1,Appender2 
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender 
log4j.appender.Appender2=org.apache.log4j.RollingFileAppender 
log4j.appender.Appender2.File=C:/Log4j/MyLogExample.log 

log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout` 
log4j.appender.Appender1.Target=System.out` 
log4j.appender.Appender1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n` 

log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout` 
log4j.appender.Appender2.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n` 

log4j.appender.Appender2.MaxFileSize=50KB` 
log4j.appender.Appender2.MaxBackupIndex=10` 

當我運行使用Eclipse MyLogExample.log文件這一計劃被創建。但是,在我創建了一個jar文件並使用命令提示符運行它之後,日誌文件不會被創建。

在控制檯中我可以看到這個錯誤。

log4j:ERROR Could not read configuration file [log4j.properties]. 
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified) 

添加下面的代碼示例後,即使在使用命令提示符運行jar文件時也會創建日誌文件。

PropertyConfigurator.configure("C:\\eclipeworkspace\\Log4jTest\\log4j.properties"); 

我如何給出相對路徑而不是精確路徑?

回答

1

log4j.properties應該在你的classpath中。從命令行運行時將其添加到類路徑中。

一個更好的選擇是指定使用

-Dlog4j.configuration=relative path/log4j.properties

在命令行屬性文件。 在這種情況下,您可以從代碼中刪除行PropertyConfigurator.configure("log4j.properties"); - 您不需要在代碼中執行任何操作來指定屬性文件。

3

使用此:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
URL url = classLoader.getResource("log4j.properties"); 
File file = new File(url.toURI()); 
+2

或者稍微短一些:'PropertyConfigurator.configure(classLoader.getResource(「log4j.properties」));'。 @Pradeep這個假設'Log4jTest'目錄在類路徑上,所以你必須檢查你的eclipse項目配置。 – 2012-07-20 06:09:30

+0

我已添加此代碼段 ClassLoader classLoader = Thread.currentThread()。getContextClassLoader(); PropertyConfigurator.configure(classLoader.getResource(「log4j.properties」)); 但仍然相同的錯誤? – 2012-07-20 06:40:53

+0

log4j:錯誤無法從URL [null]讀取配置文件。 – 2012-07-20 07:08:08