log4php中不同日志级别的单独输出

时间:2011-04-27 03:42:06

标签: log4php

我有点新的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 个答案:

答案 0 :(得分:2)

这可以使用带过滤器和一个记录器的多个appender来实现。

<强>概述

您可以定义多个appender以将日志记录发送到不同的目标。我们将为每个级别定义1个appender,每个appender将记录到不同的文件。

除此之外,我们还需要为每个appender创建一个过滤器。我们将使用过滤器LoggerFilterLevelRange,我们将指定最小和最大级别。请注意,过滤器LoggerFilterLevelMatch 无法使用,因为它与过滤器匹配,但与其他过滤器无关。

对于记录器,我们将所有的appender附加到唯一的记录器上。

这样,您可以根据错误级别将不同的日志消息发送到不同的文件。

<强>配置     

<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!');

我希望这会有所帮助。

答案 1 :(得分:0)

我认为适当的解决方案是对您的appender应用过滤器和阈值。像这样:

<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附加程序相同的过滤器。