可以使用模拟库创建多个日志文件吗?

时间:2013-04-04 09:56:39

标签: php logging logfiles php-analog-package

我正在寻找一个体面的,易于使用的日志助手类集/框架。

我发现Analog并发现它正是我所需要的,尽管它似乎一次只能用于一个日志文件。

我错了吗?!

您是否知道允许编写多个日志的类似(大小/功能)项目?模拟分支可能吗?我已经看过log4php,KLogger和Monolog。

2 个答案:

答案 0 :(得分:3)

的源代码判断

您应该能够同时使用多个文件处理程序。尝试一下这一点:

Analog::handler(Analog\Handler\Multi::init(array(
    Analog::ERROR   => Analog\Handler\File::init('/path/to/logs/errors.log'),
    Analog::WARNING => Analog\Handler\File::init('/path/to/logs/warnings.log'),
    Analog::DEBUG   => Analog\Handler\File::init('/path/to/logs/debug.log')
)));

如果无法使其与Analog\Handler\Multi一起使用,您仍然可以编写自己的Composite记录器,以适应模拟文件处理程序。为此,首先创建一个接口,定义您希望如何在应用程序中使用Logger:

interface Logger
{
    const ERROR = 'error';
    const WARNING = 'warning';
    const DEBUG = 'debug';

    public function log($message, $level);
}

然后创建Analog for Analog,使其满足Interface:

class AnalogAdapter implements Logger
{
    private $adaptee;

    public function __construct(Analog $analog)
    {
        $this->adaptee = $analog;
    }

    public function log($message, $level)
    {
        $adaptee = $this->adaptee;
        $adaptee::log($message, $adaptee::$level);
    }
}

最后,编写Composite Logger:

class CompositeLogger implements Logger
{
    private $loggers = array;

    public function registerLogger(Logger $logger)
    {
        $this->loggers[] = $logger;
    }

    public function log($message, $level)
    {
        foreach ($this->loggers as $logger)
        {
            $logger->log($message, $level);
        }
    }
}

然后创建模拟文件处理程序并使用Composite注册它们:

$logger = new CompositeLogger;
$logger->registerLogger(
    new AnalogAdapter(
        Analog\Handler\File::init('/path/to/logs/errors.log')
    )
);

// … add more Loggers in the same way

$logger->log('This is a warning', Logger::WARNING);

然后警告将写入所有注册的记录器。

答案 1 :(得分:0)

是的它确实很棒。您可以为不同的日志类型创建不同的日志功能。

EG。这将邮件错误。但是要在日志中写下警告。

Analog::handler(Analog\Handler\Multi::init(array(
    Analog::ERROR   => Analog\Handler\Buffer::init (
    Analog\Handler\Mail::init (
        'you@example.com',
        'Log messages',
        'noreply@example.com'
    )
)
    ,Analog::WARNING => Analog\Handler\File::init(__DIR__.'/log/warning.log')
    //Analog::DEBUG   => Analog\Handler\File::init('/path/to/logs/debug.log')
)));