отдельный вывод для разных уровней журнала в log4php - PullRequest
1 голос
/ 27 апреля 2011

я вроде как новый с log4php .. мне нужно вывести уровни INFO и DEBUG в разных файлах. это возможно? мой xml выглядит так:

<appender name="dlog" class="LoggerAppenderRollingFile">
    <param name="file" value="C:/log/dlog"></param></appender>
<appender name="ilog" class="LoggerAppenderRollingFile">
    <param name="file" value="C:/log/ilog/"></param></appender>

<root>
    <level value="DEBUG" />       
    <appender_ref ref="dlog" ></appender_ref>
</root>

<logger name="myLogger">      
    <level        value="INFO"/>
    <appender-ref ref="ilog" />
</logger>

** Выводит только уровни INFO в соответствующем имени файла. пожалуйста помоги :( Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2013

Этого можно достичь, используя несколько приложений с фильтрами и один регистратор.

Обзор

Вы можете определить несколько приложений, чтобы отправлять записи в разные пункты назначения.Для каждого уровня мы определим 1 приложение, и каждый из них будет регистрировать разные файлы.

В дополнение к этому нам необходимо создать фильтр для каждого приложения.Мы будем использовать фильтр LoggerFilterLevelRange и укажем минимальный и максимальный уровень.Обратите внимание, что фильтр LoggerFilterLevelMatch нельзя использовать, так как он соответствует фильтру, но нейтрален по отношению к другим фильтрам.

Что касается регистраторов, мы присоединим все наши дополнения кодин и единственный регистратор.

Таким образом, вы можете отправлять различные сообщения регистрации в разные файлы в зависимости от уровня ошибки.

Конфигурация

<appender name="dlog" class="LoggerAppenderRollingFile">
    <param name="file" value="C:/log/dlog" />
    <filter class="LoggerFilterLevelRange">
        <param name="levelMin" value="debug" />
        <param name="levelMax" value="debug" />
    </filter>
</appender>
<appender name="ilog" class="LoggerAppenderRollingFile">
        <param name="file" value="C:/log/ilog" />
        <filter class="LoggerFilterLevelRange">
            <param name="levelMin" value="info" />
            <param name="levelMax" value="info" />
        </filter>
    </appender>
    <root>
        <level value="INFO" />
        <appender_ref ref="ilog" />
        <appender_ref ref="dlog" />
    </root>
</configuration>

Использование

require_once 'Logger.php';
Logger::configure('log_config.xml');
$logger = Logger::getLogger();
$logger->info('This message is meant to inform.');
$logger->debug('A debug message!');

Надеюсь, это поможет.

0 голосов
/ 14 мая 2011

Я думаю, что подходящим решением было бы применить фильтр и порог для ваших аппендеров. Вот так:

<appender name="dlog" class="LoggerAppenderRollingFile">
  <param name="file" value="C:/log/dlog" />
  <filter class="LoggerFilterLevelMatch">
    <param name="LevelToMatch" value="debug" />
    <param name="AcceptOnMatch" value="true" />
  </filter>
  <filter class="LoggerFilterDenyAll" />
</appender>

<appender threshold="INFO" name="ilog" class="LoggerAppenderRollingFile">
  <param name="file" value="C:/log/ilog/" />
</appender>

<root>
  <level value="DEBUG" />       
  <appender_ref ref="dlog" />
  <appender_ref ref="ilog" />
</root>

Это позволило бы только сообщения с уровнем debug в dlog и (из-за порога) только info и выше в ilog. Если вы не хотите, чтобы сообщения выше info уровня в ilog, то вы можете применить тот же фильтр, что и для приложения dlog.

...