从两个共享类别的两个不同函数到两个不同的日志文件

问题描述 投票:0回答:0

我有什么 我使用log4php,但这也可以适用于log4perl,log4j或任何其他log4*模块。 我有两个不同的功能:

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
}
My

log4phpConf.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()

php logging log4j log4perl log4php
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.