我正在寻找一个体面的、易于使用的日志记录助手类集/框架。
我发现了Analog并发现它正是我所需要的,尽管它似乎一次只能用于一个日志文件。
我错了吗 ?!
您是否知道一些允许写入多个日志的类似(大小/功能)项目?也许是模拟分支?我已经看过 log4php、KLogger 和 Monolog。
我正在寻找一个体面的、易于使用的日志记录助手类集/框架。
我发现了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
,你仍然可以编写自己的复合记录器,适应模拟文件处理程序。为此,首先创建一个接口,定义您希望如何在应用程序中使用 Logger:
interface Logger
{
const ERROR = 'error';
const WARNING = 'warning';
const DEBUG = 'debug';
public function log($message, $level);
}
然后为模拟创建适配器,使其满足接口:
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。
是的,它确实很好用。并且您可以为不同的日志类型创建不同的日志函数。
例如。这将通过电子邮件发送错误。但是将警告写入日志。
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')
)));