【问题标题】:Why this log4php config leads to outputting duplicates in log files为什么这个 log4php 配置会导致在日志文件中输出重复项
【发布时间】:2018-03-13 01:02:54
【问题描述】:

我有 log4php 配置,其中包含特定文件中每个级别的附加程序,如下所示:

<configuration xmlns="http://logging.apache.org/log4php/">
    <appender name="info" class="LoggerAppenderRollingFile">
        <layout class="LoggerLayoutPattern">
            <param name="conversionPattern" value="%date %logger %-5level %msg%n"/>
        </layout>
        <param name="file" value="../app/logs/info.log"/>
        <param name="append" value="true"/>
        <param name="maxFileSize" value="100MB"/>
        <param name="maxBackupIndex" value="1"/>
        <filter class="LoggerFilterLevelRange">
            <param name="levelMin" value="info"/>
            <param name="levelMax" value="info"/>
        </filter>
    </appender>
    <appender name="warn" class="LoggerAppenderRollingFile">
        <layout class="LoggerLayoutPattern">
            <param name="conversionPattern" value="%date %logger %-5level %msg%n"/>
        </layout>
        <param name="file" value="../app/logs/warn.log"/>
        <param name="append" value="true"/>
        <param name="maxFileSize" value="100MB"/>
        <param name="maxBackupIndex" value="1"/>
        <filter class="LoggerFilterLevelRange">
            <param name="levelMin" value="warn"/>
            <param name="levelMax" value="warn"/>
        </filter>
    </appender>
    <appender name="error" threshold="error" class="LoggerAppenderRollingFile">
        <layout class="LoggerLayoutPattern">
            <param name="conversionPattern" value="%date %logger %-5level %msg%n"/>
        </layout>
        <param name="file" value="../app/logs/error.log"/>
        <param name="append" value="true"/>
        <param name="maxFileSize" value="100MB"/>
        <param name="maxBackupIndex" value="1"/>
        <filter class="LoggerFilterLevelRange">
            <param name="levelMin" value="error"/>
            <param name="levelMax" value="fatal"/>
        </filter>
    </appender>
    <appender name="debug" class="LoggerAppenderRollingFile">
        <layout class="LoggerLayoutPattern">
            <param name="conversionPattern" value="%date %logger %-5level %msg%n"/>
        </layout>
        <param name="file" value="../app/logs/debug.log"/>
        <param name="append" value="true"/>
        <param name="maxFileSize" value="100MB"/>
        <param name="maxBackupIndex" value="1"/>
        <filter class="LoggerFilterLevelRange">
            <param name="levelMin" value="debug"/>
            <param name="levelMax" value="debug"/>
        </filter>
    </appender>
    <root>
        <level value="debug" />
        <appender-ref ref="info"/>
        <appender-ref ref="warn"/>
        <appender-ref ref="error"/>
        <appender-ref ref="debug"/>
    </root>
</configuration>

还有下面的php代码:

Logger::configure('config.xml');
$logger = Logger::getRootLogger();
$logger->warn("test");
$logger->error("test");
$logger->info("test");
$logger->debug("test");

当我运行 php 代码时,每个文件都被创建并按预期为每个文件逐级写入日志,但是每个日志行都像这样重复:

cat logs/info.log 
2017-10-01T22:06:44+00:00 root INFO  test
2017-10-01T22:06:44+00:00 root INFO  test

我做错了什么?

更新

也试过 Monolog 记录器,但有同样的问题,看起来类加载有问题。我正在使用配置有下一行的作曲家:

{
  "require": {
    "monolog/monolog": "1.23.0"
  },
  "autoload": {
    "psr-4": {
      "App\\": "src"
    }
  }
}

而且我有 htaccess,我将流量重定向到索引 php,在那里我初始化 App 类(不在 src 中)。在那个类中,我只是调用下一个代码:

$this->logger = new Logger('default');
$this->logger->pushHandler(new StreamHandler(LOGS_DIR . 'info.log', Logger::INFO));
$this->logger->pushHandler(new StreamHandler(LOGS_DIR . 'error.log', Logger::ERROR));
$this->logger->pushHandler(new StreamHandler(LOGS_DIR . 'debug.log', Logger::DEBUG));

$this->logger->error("error");
$this->logger->info("info");
$this->logger->debug("debug");

我使用作曲家的方式可能有问题?

【问题讨论】:

    标签: php logging composer-php classloader log4php


    【解决方案1】:

    所以在我的特殊情况下,我有错误的 .htaccess 文件,它不仅会加载我需要的页面,还会加载像 favico.php 这样的页面。

    之前:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([a-zA-Z0-9\/^\.]+)$ index.php [QSA,L]
    

    之后:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^\.]+)$ index.php [QSA,L]
    

    只是更改了不包含点的匹配路线的模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多