Аддитивность логгера log4php

В документации по конфигурации log4php есть опция конфигурации, называемая "аддитивность", которая останавливает наследование от корневых регистраторов.

Тем не менее, я добавил в файл конфигурации в формате PHP, root logger все еще регистрирует запись, которая должна появиться внутри logger queryLogger только:

<?php
return array(
    'rootLogger' => array(
        'level' => 'DEBUG',
        'appenders' => array('fileAppender'),
    ),
    'loggers' => array(
        'queryLogger' => array(
            'level' => 'INFO',
            'appenders' => array('queryFileAppender')
        )
    ),
    'appenders' => array(
        'fileAppender' => array(
            'class' => 'LoggerAppenderDailyFile',
            'layout' => array(
                'class' => 'LoggerLayoutPattern',
                'params' => array(
                    'conversionPattern' => '%d{Y-m-d H:i:s.u} [%-5p] %-100m ---------- [%F:%L]%n'
                )
            ),
            'params' => array(
                'datePattern' => 'Y-m-d',
                'file' => LOG_PATH . 'system-%s.log',
            ),
        ),
        'queryFileAppender' => array(
            'class' => 'LoggerAppenderDailyFile',
            'layout' => array(
                'class' => 'LoggerLayoutPattern',
                'params' => array(
                    'conversionPattern' => '%d{Y-m-d H:i:s.u} %m%n'
                )
            ),
            'params' => array(
                'datePattern' => 'Y-m-d',
                'file' => LOG_PATH . 'query-%s.log',
            ),
        ),
    ),
    'additivity' => array(
        'fileAppender' => false,
    ),
);
?>

Моя цель - войти только queryLogger, но не в rootLogger, Что я упустил?

1 ответ

Решение

Это, вероятно, плохо документировано, потому что нет реального примера того, как настроить аддитивность, кроме устаревшего примера способа INI (который устарел).

Но, глядя на XML-пример https://logging.apache.org/log4php/docs/loggers.html (Подраздел "Отключение аддитивности приложения"), выявляет, что аддитивность является настройкой самого регистратора - он не стоит сам по себе (INI-способ настройки вещей заставляет вас так думать).

И, посмотрев на код в LoggerConfiguratorDefault::configureLogger становится ясно, что additivity подключ подключен параллельно level а также appenders в индивидуальной конфигурации регистратора.

Так что это должно работать:

// ...
'loggers' => array(
    'queryLogger' => array(
        'level' => 'INFO',
        'appenders' => array('queryFileAppender'),
        'additivity' => false
    )
),    //...
Другие вопросы по тегам