我正在寻找一个体面的、易于使用的日志记录助手类集/框架。
我发现了Analog并发现它正是我所需要的,尽管它似乎一次只能用于一个日志文件。
我错了吗 ?!
您是否知道一些允许写入多个日志的类似(大小/功能)项目?也许是模拟分支?我已经看过 log4php、KLogger 和 Monolog。
最佳答案
从源代码来看
您应该能够同时使用多个文件处理程序。尝试这样的事情:
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记录器,适应模拟文件处理程序。为此,首先创建一个接口(interface),定义您希望如何在应用程序中使用 Logger:interface Logger
{
const ERROR = 'error';
const WARNING = 'warning';
const DEBUG = 'debug';
public function log($message, $level);
}
然后为模拟创建适配器,使其满足接口(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);
然后警告将被写入所有已注册的 Logger。
关于php - 模拟库可以用来创建多个日志文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808018/