我有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或检测使用它并从函数返回?
答案 0 :(得分:1)
我处于相同的位置,情况略有不同:如果我访问某个值,我的配置对象会记录,但如果我访问记录器配置文件的配置值,则无法记录。
log4php的类Logger
具有私有静态属性$initialized
,可通过私有静态方法isInitialized()
访问。我通过使用Reflection来访问静态属性的值来解决了我的问题,如果结果是false
,我返回了一个自创的NullLogger extends Logger
,如果调用了任何日志记录方法,它就什么都不做。
您的类可能也可以这样做,但更好的解决方案是确保始终初始化log4php。
我建议您在项目Jira中创建一个票证,以便更轻松地解决此问题。确实没有必要将Logger::isInitialized()
方法设为私有。