2010-12-07 2 views
4

Я очень новичок в log4j, поэтому, пожалуйста, будьте осторожны. Но вот что происходит, и я не знаю, почему: он правильно записывает файл, но имя созданного журнала кажется неправильным.Log4j logging to log4j.log вместо указанного имени файла

Вот мой log4j конфигурации:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

<appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}] [%-5p] (%t) [%c{1}] %m%n"/> 
    </layout> 
</appender> 


<appender name="file" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="log/messagecount.log" /> 
    <param name="Append" value="true" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}] [%-5p] (%t) [%c{1}] - %m%n"/> 
    </layout>   
</appender>  

<root> 
    <level value="debug"/>  
    <appender-ref ref="file"/> 
    <!-- <appender-ref ref="rolling"/> --> 
</root> 

</log4j:configuration> 

создает файл log4j.log под лог папку вместо файла messagecount.log. Означает ли это значение свойство не так, как я думаю?

Это, как я инициализировать регистратор:

переменная уровня Класс:

private static Logger logger = Logger.getLogger(MessageCount.class); 

И функция инициализации:

private void initLogger() throws IOException { 

    Properties props = new Properties(); 
    props.load(getClass().getResourceAsStream("/log4j.xml")); 
    PropertyConfigurator.configure(props); 

    logger.info("----------Logger init-----------") ; 

//  logger.debug("Sample debug message"); 
//  logger.info("Sample info message"); 
//  logger.warn("Sample warn message"); 
//  logger.error("Sample error message"); 
//  logger.fatal("Sample fatal message"); 

} 

Файл log4j.xml конфигурации находится в корне моя папка src.

Спасибо

+1

Вам не нужна эта функция init. Удали это. Просто поместите `log4j.xml` в путь к классам приложения (bin или build folder, он не будет найден в папке src), и ваше приложение найдет его автоматически. – darioo 2010-12-07 18:09:58

ответ

0

Понял! Вот что происходит, и я хотел бы сначала поблагодарить darioo и dogbane за их ответы/комментарии, так как они помогли мне понять это.

Функция init не требуется. И использование -Dlog4j.debug = true в качестве параметра JVM показало, что оно уже загружает некоторую копию файла конфигурации xml, который был расположен в папке bin.

Так что, если я избавлюсь от функции init и поместит правильный файл конфигурации в папку bin, он будет работать.

0

Я сделал копию & кашицу из файла XML и, для начала, настройки log4j выдает ошибку, потому что этот файл не является корректным XML. Вы забыли добавить

</log4j:configuration> 

как последняя строка. Может ли это быть источником вашей проблемы?

После исправления log4j запускает штраф и правильно создает файл с именем log/messagecount.log.

Я использую log4j 1.2.15. Если ваши настройки не совпадают, попробуйте опубликовать версию log4j и вашу среду. Кроме того, попробуйте называть ваш файл по-другому, например log/somelog.log, или просто somelog.log, чтобы вы могли видеть, как ведет себя log4j.

+0

Упс! ошибка копирования-вставки. Кроме того, я получил log4j сегодня, с их сайта, так что это версия 1.2.16 – CrazyPenguin 2010-12-07 17:48:36

2

Работы для меня.

Попробуйте добавить -Dlog4j.debug=true к своим параметрам JVM, чтобы получить более подробную информацию о том, что делает log4j, и почему он регистрируется до log4j.log.