funcA()
和
funcB()
。 当前,所有内容都将登录到一个文件,我想将它们分开以便每个函数。
funcA()
和funcB()
共享一些类和方法。 每个类的代码可以获取类的记录器。 例如:class DB {
private static $logger;
private static function getLogger() {
if (is_null(self::$logger)) {
self::$logger = Logger::getLogger(__CLASS__);
}
return self::$logger;
}
public function getData() {
// gets some data from the database
self::getLogger->debug("Got some data");
}
}
funcA()
,
funcB()
:
function funcA() {
// Do some funcA-ish stuff
$db = new DB();
$data = $db->getData();
// Do some more funcA-ish stuff
}
function funcB() {
// Do some funcB-ish stuff
$db = new DB();
$data = $db->getData();
// Do some more funcB-ish stuff
}
Mylog4phpConf.xml
有一个对一个日志文件的文件appender,并且每个类都有一个不同的记录器,因此我可以控制每个类别的日志级别。我想要什么 我想拥有两个不同的日志文件,一个是
funcA()
文件,一个用于
funcB()
。 但是我仍然希望能够控制每个类的日志级别。
因此,第一步是设置两个文件附录,一个用于每个功能。 然后,我需要确定要分配每个类记录器的appender。 有些登录器是funcA
funcB
处理的独有的,因此很容易。 但是对于共享的人,我必须为每个类创建两个记录仪,并以某种方式知道在每个共享方法中使用哪个记录器。 这将是一场噩梦。
因此,我的想法是只有两个记录仪,一个用于每个函数,然后只需将记录器实例传递到每个类中,以便类可以使用它。 但是我不确定这是否是正确的方法,我想知道我是否会失去控制每个类的日志级别的能力。 我以错误的方式接近这一点?实际上不是维护噩梦,无法跟踪记录仪。考虑到此抽象幻想代码:
class Something {
protected $loggers = [
'A' => getALogger(),
'B' => getBLogger()
];
protected $currentLoggerKey = null;
public function getLogger() {
return $this->loggers[$this->currentLoggerKey];
}
//...
public function A() {
$this->currentLoggerKey = 'A';
//...
}
public function B() {
$this->currentLoggerKey = 'B';
}
}
getALogger()