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

Rob*_* G. 4 php logging logfiles php-analog-package

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

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

我错了吗 ?!

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

Gor*_*don 5

从源码来看

\n\n\n\n

您应该能够同时使用多个文件处理程序。尝试一些类似的事情:

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

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

\n\n
interface Logger\n{\n    const ERROR = \'error\';\n    const WARNING = \'warning\';\n    const DEBUG = \'debug\';\n\n    public function log($message, $level);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后创建模拟适配器,使其满足接口:

\n\n
class AnalogAdapter implements Logger\n{\n    private $adaptee;\n\n    public function __construct(Analog $analog)\n    {\n        $this->adaptee = $analog;\n    }\n\n    public function log($message, $level)\n    {\n        $adaptee = $this->adaptee;\n        $adaptee::log($message, $adaptee::$level);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后,编写复合记录器:

\n\n
class CompositeLogger implements Logger\n{\n    private $loggers = array;\n\n    public function registerLogger(Logger $logger)\n    {\n        $this->loggers[] = $logger;\n    }\n\n    public function log($message, $level)\n    {\n        foreach ($this->loggers as $logger)\n        {\n            $logger->log($message, $level);\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
$logger = new CompositeLogger;\n$logger->registerLogger(\n    new AnalogAdapter(\n        Analog\\Handler\\File::init(\'/path/to/logs/errors.log\')\n    )\n);\n\n// \xe2\x80\xa6 add more Loggers in the same way\n\n$logger->log(\'This is a warning\', Logger::WARNING);\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n