2012-07-20 3 views
4

Это мой Учащийся, который использовался для тестирования log4j.Log4j Log не создается при запуске 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) 

После того как я добавить следующий код, файл журнала создается, даже если файл банка работать с командной строки.

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

Как я могу указать относительный путь вместо точного пути?

ответ

1

log4j.properties должны быть в вашем пути к классам. Добавьте его в путь класса при запуске из командной строки.

Лучшая альтернатива, чтобы указать файл свойства, используя

-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. –

+0

Я добавил этот код в раздел ClassLoader classLoader = Thread.currentThread(). GetContextClassLoader(); PropertyConfigurator.configure (классLoader.getResource ("log4j.properties")); но все же такая же ошибка? –

+0

log4j: ERROR Не удалось прочитать файл конфигурации с URL [null]. –

Смежные вопросы