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

标签 php logging logfiles php-analog-package

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

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

我错了吗 ?!

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

最佳答案

从源代码来看

  • https://github.com/jbroadway/analog/blob/master/examples/file.php
  • https://github.com/jbroadway/analog/blob/master/examples/multi.php
  • https://github.com/jbroadway/analog/blob/master/lib/Analog/Handler/Multi.php

  • 您应该能够同时使用多个文件处理程序。尝试这样的事情:
    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/

    相关文章:

    php - 如果特定属性已存在,则阻止将数据插入数据库

    php - 如何使用 Paypal php SDK 从沙箱上线

    c# - 如果由 Windows 窗体应用程序打开,如何以编程方式转到记事本文件的末尾

    Python 客户端/服务器实时流式传输日志文件更新?

    regex - 需要过滤日志以搜索最近 5 分钟的行

    php - 尝试在 laravel 上运行 gulp 时出现错误

    不同系统中的Python日志显示不同的格式/级别

    c# - MVVM - 在 View 中显示来自多个模型实体的消息

    java - 如何验证 Java 日志记录属性文件?

    Javascript 关联数组简写在 IE 中不起作用