1

所以我最近发现 log4* 包可用于 PHP,看到这个包后,我急切地从 log4php 网站下载了最新版本,并按照安装说明进行操作。说明说明一种是下载tar包,解压,在自己选择的地方放如下目录:log4php/src/main/php

因此,我将内容复制log4php/src/main/php到了 lib/log4php 下的 lib 目录中。

在我的脚本中,根据需要,我需要“Logger.php”类并指定一个属性文件来管理我的附加程序。属性文件 log4php.properties 位于我的文件系统中的“/home1/ioforgec/www/devlab/pnotes/config/log4php.properties”。

这是日志文件内容:

#
# Example Logger
#
log4php.appender.EA1 = LoggerAppenderConsole
log4php.appender.EA1.target = STDOUT
log4php.appender.EA1.layout = LoggerLayoutPattern
log4php.appender.EA1.ConversionPattern = "%m"
log4php.appender.EA1.threshold = FATAL
log4php.exampleLogger = FATAL, EA1

所以这是我实现的脚本的副本(或多或少“包装”了 log4php 功能):

<?php

require_once('/home1/ioforgec/www/devlab/pnotes/lib/log4php/Logger.php');

class LogUtil
{
    public $logger;

    public $properties_file = "/home1/ioforgec/www/devlab/pnotes/config/log4php.properties";

    public static function logExample($msg)
    {
        Logger::configure($properties_file);
        $logger = Logger::getLogger("example");
        $logger->debug("Shouldnt see this print because of config max level FATAL");
        $logger->fatal($msg);
    }
}
?>

为了测试它是否正常工作,以下脚本调用上面显示的 LogUtil.php:

#!/usr/bin/php
<?php
require_once("lib/utils/LogUtil.php");
LogUtil::logExample("example message");
?>

因此,尽管将示例记录器配置为将消息格式化为普通消息,尽管将记录器的级别设置为 FATAL 的最大值,不仅在记录器声明中而且在阈值命令中,控制台的打印看起来对我来说像默认的根记录器:

Mon Oct 18 20:30:05 2010,705 [827] DEBUG example - Shouldnt see this print because of config max level FATAL
Mon Oct 18 20:30:05 2010,711 [827] FATAL example - example message

我看到没有指定纯格式的打印语句,我看到两个打印语句,调试打印(由于记录器配置上的 FATAL 设置,它不应该打印 - FATAL 比 DEBUG 高得多)

我到底做错了什么?我已经尝试了我能想到的所有设置组合。有没有人有什么建议?

编辑 - 更新 - 这仍然是一个问题。没有进展。

Edit2 - 真的吗?这个论坛上没有人尝试过使用这个非常流行的日志包及其作为 PHP 模块的化身吗?

我已经尝试了所有可能的途径来尝试回答我的问题,包括 log4php 用户的邮件列表。

4

1 回答 1

3

在处理配置文件更多小时后,我发现了一个小而重要的事实。为了指定一个'logger',你必须在'logger'层次结构下命名它,在'appender'层次结构下命名它的appender,等等。例如:

# for the 'console' logger named 'example' we first define the appender:
log4php.appender.consoleAppender = LoggerAppenderConsole
log4php.appender.consoleAppender.target = STDOUT
log4php.appender.consoleAppender.layout = LoggerLayoutSimple

# we then assign the appender and the minimum log level to the logger:
log4php.logger.example = WARN, consoleAppender

我的错误是看到根记录器层次结构名称“log4php.rootLogger”并假设为了分配记录器只需为“log4php.lognameLogger”命名一个值。可悲的是,这不是借口,因为文档中隐藏了一个示例。我想在 9 个多小时内找到它总比没有好:)

感谢那些提醒我还有更多调试工作要做的人,我感谢提醒我继续尝试

于 2010-10-20T05:36:14.197 回答