我目前正在从我们自己的专有日志记录解决方案转移到 log4php。
我们在项目中使用了很多只有静态方法的类。该文档定义了基本用例,例如:
class MyClass {
private $logger;
public function __construct() {
$this->logger = Logger::getLogger(__CLASS__);
$this->logger->debug('currently in constructor');
}
}
但我不能使用它,因为我也需要$logger
在静态上下文中可用。制作$logger
静态也无济于事,因为我的类的构造函数从未被调用(因为它的所有成员都是静态的)。
文档告诉我然后为该成员使用静态初始化程序。但是我必须记住为我使用的所有类调用它。这似乎太容易出错了。
所以我想出了这个:
class Foo {
private static $logger = null;
private static function logger() {
if( null == self::$logger ) self::$logger = Logger::getLogger( __CLASS__ );
return self::$logger;
}
public static function bar() {
self::logger()->debug( "test" );
}
}
Foo::bar();
但这似乎也太多开销了。那么,有什么建议吗?