2

我对 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>

* *这仅输出相应文件名中的信息级别,请帮助:(非常感谢。

4

2 回答 2

3

这可以使用带有过滤器和一个记录器的多个附加程序来实现。

概述

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

除了这些,我们还需要为每个 appender 创建一个过滤器。我们将使用过滤器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!');

我希望这有帮助。

于 2013-02-01T05:52:50.827 回答
0

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

<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级别为 indlog和(由于阈值)info且高于 in的消息ilog。如果您不想要高于infoin 级别的消息,那么您可以应用与appenderilog相同的过滤器。dlog

于 2011-05-14T15:16:11.873 回答