2014-09-10 2 views
2

У меня есть файл конфигурации log4cxx.xml, который определяет несколько скопированных файлов.Одиночное определение значения, используемого несколько раз в конфигурации log4cxx

<?xml version="1.0" encoding="UTF-8" ?> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> 
    <appender name="A" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="file" value="file1.log" /> 
    <param name="MaxFileSize" value="12MB" /> 
    ... 
    </appender> 
    ... 
    <appender name="G" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="file" value="file7.log" /> 
    <param name="MaxFileSize" value="12MB" /> 
    ... 
    </appender> 
    <!-- Loggers referencing A, B, ..., G --> 

Я хотел бы иметь одно место в файле, где я определить максимальный размер файла. Я знаю, что я могу заменить 12 МБ на $ {MAX_FILE_SIZE} и получить значение из среды, но я не хочу устанавливать переменную среды.

Казалось, что следующее должно работать.

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration [ 
<!ENTITY maxFileSize "12MB"> 
]> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> 
    <appender name="A" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="file" value="file1.log" /> 
    <param name="MaxFileSize" value="&maxFileSize" /> 
    ... 
    </appender> 
    ... 

Однако это не удается с log4cxx: Error parsing file [log4cxx.xml], Internal errorXML parser error code: not well-formed (invalid token) (4).

Мое предположение о том, что происходит не так, заключается в том, что либо я получил инструкцию DOCTYPE неправильно, либо log4cxx не имеет полного синтаксического анализа XML и не ожидает DOCTYPE. У меня мало опыта работы с DTD, поэтому оба ответа мне правдоподобны.

Есть ли способ исправить DOCTYPE, чтобы выполнить эту работу, или совершенно другой метод, который получит мой желаемый результат, указав максимальный размер файла в одном месте в файле?

ответ

3

Похоже, вы просто пропустили точку с запятой в ссылке на сущность.

Он должен выглядеть следующим образом:

<param name="MaxFileSize" value="&maxFileSize;" /> 

доктайп декларация выглядит отлично.

+0

В этом была проблема. Благодаря! –

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