我正在寻找一个体面的,易于使用的日志助手类集/框架。
我发现Analog并发现它正是我所需要的,尽管它似乎一次只能用于一个日志文件。
我错了吗?!
您是否知道允许编写多个日志的类似(大小/功能)项目?模拟分支可能吗?我已经看过log4php,KLogger和Monolog。
答案 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')
)));