禁用或检测默认配置

时间:2012-10-19 18:03:17

标签: php log4php

我有php文件,其中包含类" FooClass"用于一些项目。我最近添加了使用log4net进行日志记录的方法,如下所示:

private static function log($message,$level=0)
{
    if(!isset(self::$logger))
    {
        if(!class_exists("Logger")) return;
        self::$logger = Logger::getLogger("DBw");
        if(!isset(self::$logger)) return;
    }
    //logging
}

一些使用FooClass的文件可以通过使用Logger :: configure(" config.xml")来定义配置。 但是其他人没有定义它,在这种情况下,FooClass开始使用LoggerConfiguratorDefault,它跟踪日志为" echo"。这是不可接受的。

我想看看配置是否未被其他文件定义,FooClass没有使用LoggerConfiguratorDefault进行日志记录。

如何禁用LoggerConfiguratorDefault或检测使用它并从函数返回?

1 个答案:

答案 0 :(得分:1)

我处于相同的位置,情况略有不同:如果我访问某个值,我的配置对象会记录,但如果我访问记录器配置文件的配置值,则无法记录。

log4php的类Logger具有私有静态属性$initialized,可通过私有静态方法isInitialized()访问。我通过使用Reflection来访问静态属性的值来解决了我的问题,如果结果是false,我返回了一个自创的NullLogger extends Logger,如果调用了任何日志记录方法,它就什么都不做。

您的类可能也可以这样做,但更好的解决方案是确保始终初始化log4php。

我建议您在项目Jira中创建一个票证,以便更轻松地解决此问题。确实没有必要将Logger::isInitialized()方法设为私有。