2012-05-10 3 views
6

Я новичок в log4j. Это то, что у меня есть. У меня около 20 файлов в разных пакетах в STAND ALONE JAVA APPLICATION. Я пытаюсь использовать и записывать файлы журналов.Инициализация log4j для автономного приложения

Ниже мои log4j.properties файл, который находится в моем пути к классам:

log4j.appender.R = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.R.File = /ParentFolder/ChildFolder/application.log 
log4j.appender.R.Append = true 
log4j.appender.R.DatePattern = '.'yyy-MM-dd 
log4j.appender.R.layout = org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n 

Ниже приведен код для инициализации протоколирования в моем основном методе

final String LOG_FILE = "C:/eclipse_workspace/lib/log4j.properties"; 
     Properties logProp = new Properties();  
     try  
     {  
     logProp.load(new FileInputStream (LOG_FILE)); 
      PropertyConfigurator.configure(logProperties);  
      logger.info("Logging enabled");  
     }  
     catch(IOException e)     
     {  
    System.out.println("Logging not enabled");  
       } 

В каждом java класс приложения У меня есть следующий код

import org.apache.log4j.*; 

private static final Logger logger = Logger.getLogger(TheActualClassName.class); 

Но При запуске приложения я получаю следующие предупреждения.

log4j: WARN Для регистратора не найдено никаких добавлений (com.xxx.myApp.MainProgram.MyFileName). log4j: WARN Пожалуйста, правильно инициализируйте систему log4j. log4j: WARN См. http://logging.apache.org/log4j/1.2/faq.html#noconfig для получения дополнительной информации.

Что я делаю неправильно? Файл журнала «application.log» не генерируется

+0

также, вы можете использовать Logger.getRootLogger() без необходимости писать класс в качестве аргумента – Vladimir

+0

Вы можете прочитать связанный документ, он сообщает вам все, что вам нужно. – Behe

ответ

6

Может потребоваться следующая строка:

# Set root logger level to INFO and appender to R. 
log4j.rootLogger=INFO, R 

Корневая регистратор всегда доступен и не имеет имени.

Поскольку версия 1.2.7, log4j (с классом LogManager) ищет log4j.xml в пути к классам. Если log4j.xml не существует, то log4j (с классом LogManager) ищет путь log4j.properties в пути к классам.

+0

Это было именно так. Теперь нет ошибок, и у меня также есть файл журнала в указанной папке. Спасибо, Пол – Raghu

4

Если вы собираетесь использовать файл с именем log4j.properties, и это на пути к классам приложения, нет необходимости даже назвать PropertyConfiguration или DOMConfigurator - log4j will do this automatically, когда он сначала инициализируется (когда вы сначала загружаете регистратор).

Сообщение об ошибке, похоже, указывает на то, что ваша конфигурация не загружается.

Добавить аргумент виртуальной машины -Dlog4j.debug в приложение, чтобы log4j выдавал целую кучу информации при запуске, в которую входят файлы, которые он пытается загрузить, и какие значения он находит в конфигурации.

+0

с помощью xmlconfigurator, они будут любого улучшения? – Venki

+0

@Morpheus, нет, поскольку проблема будет такой же - конфигуратор не сможет прочитать переданную ему конфигурацию, вероятно, из-за проблем с пути. –

+1

Начиная с версии 1.2.7, log4j ищет 'log4j.properties' и' log4j.xml' в пути к классам. –

0

Raghu, если вы используете автономные конфигурации для настройки свойств log4j затем использование может использовать метод BasicConfigurator.configure() для решения вашей проблемы appenders.

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