Log4j регистрируется в log4j.log вместо указанного имени файла - PullRequest
4 голосов
/ 07 декабря 2010

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

Вот моя конфигурация 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 );

И функция init

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.

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 декабря 2010

У меня работает.

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

0 голосов
/ 07 декабря 2010

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

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

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

0 голосов
/ 07 декабря 2010

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

</log4j:configuration>

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

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

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

...