0

我有 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 或检测使用它并从函数返回?

4

1 回答 1

1

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

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

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

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

于 2012-10-19T18:19:16.170 回答