понедельник, 26 апреля 2010 г.

Багофича в LoggerAppenderDailyFile

Нашла некую особенность в работе аппендера LoggerAppenderDailyFile. И не могу понять, бага это или фича.

Вот есть конфиг:
<log4php:configuration xmlns:log4php="http://logging.apache.org/log4php/" threshold="all" debug="false">
    <appender name="default" class="LoggerAppenderDailyFile">
        <param name="datePattern" value="Y-m-d" />
        <param name="file" value="logs/%s.log" />
        <layout class="LoggerLayoutPattern">
            <param name="ConversionPattern" value="%d{H:i:s} %6p: %m%n" />
        </layout>
    </appender>
    <root>
        <level value="ALL" />
        <appender_ref ref="default" />
    </root>
</log4php:configuration>
Здесь все работает нормально. Однако, переставим параметры аппендера местами:
<log4php:configuration xmlns:log4php="http://logging.apache.org/log4php/" threshold="all" debug="false">
    <appender name="default" class="LoggerAppenderDailyFile">
        <param name="file" value="logs/%s.log" />         <param name="datePattern" value="Y-m-d" />
        <layout class="LoggerLayoutPattern">             <param name="ConversionPattern" value="%d{H:i:s} %6p: %m%n" />         </layout>     </appender>     <root>         <level value="ALL" />         <appender_ref ref="default" />     </root> </log4php:configuration>
Если мы теперь запустим приложение, то окажется, что наш datePattern не применился, и файл назван с использованием дефолтного формата даты (Ymd). Дело в том, что log4php, разбирая конфигурацию, последовательно читает параметры и для каждого сразу запускает функцию set<ParamName>. Вот и получается, что, увидев параметр file он вызывает метод setFile, а в нем используется datePattern, а тот еще не задан. Так что для желаемой работы аппендера нужно, чтобы параметр datePattern задавался раньше.
И вот, не знаю теперь, как к этому относиться. Скорее это все же бага, потому что порядок следования нодов в XML не должен быть важен. Да и не должны нас волновать тонкости процесса работы log4php. Однако, деваться нам некуда и будем иметь в виду.

1 комментарий:

bear комментирует...

>> порядок следования нодов в XML не должен быть важен

Вот, например, здесь в комментарии к первому примеру написано, что цепочка фильтров строится в соответствии с положением фильтра в xml.
Если не нарушать и не учитывать порядок, надо было бы, наверное, вводить ещё доп. параметр типа для фильтра.
Наверное, есть ещё много примеров, где порядок объявления в XML всё-таки используется ).

Но применительно к вашему примеру - действительно, совсем некрасиво получается.
Спасибо за предупреждение.