【问题标题】:Static Logger in Zend Framework 2?Zend Framework 2 中的静态记录器?
【发布时间】:2013-10-23 12:55:31
【问题描述】:

Laravel 有一个不错的静态记录器接口,我想使用它 (http://four.laravel.com/docs/errors#logging)

我想要一个就像那样,但要在 Zend Framework 2 的范围内使用。最具体地说,我希望所有在任何地方的源代码登录都简单:

Log::alert('string'); 
Log::debug('string');

有现成的包吗?我可以自己编写/扩展吗?我可以从 Laravel 中提取代码库吗?

【问题讨论】:

    标签: php zend-framework logging zend-framework2


    【解决方案1】:

    类:

    class Log
    {
        public static function __callStatic($method, $args)
        {
            $logger = new \Zend\Log\Logger();                           
            $writer = new \Zend\Log\Writer\Stream('data/logfile.txt');  
            $logger->addWriter($writer); 
    
            return $logger->$method($args[0]);
        }
    };
    

    打电话:

    Log::info("my Zendastatic Log Message");
    

    来源:

    【讨论】:

      【解决方案2】:

      你可以用你自己的类扩展 Zend\Log\Logger 并装饰它(就像同样的方式)。您甚至可以将其放入您的服务经理的服务中并获取它。

      $myLogger = new MyNamespace\MyLogger();
      $myLogger->info('Informational message');
      
      class MyLogger extends Zend\Log\Logger
      {
        public function __construct() 
        {
          $writer = new Zend\Log\Writer\Stream('data/logfile');  //define log file placement
          $this->addWriter($writer);             //add the writer
        }
      }
      

      【讨论】:

      • 谢谢。我可以将我的类放在哪里,以便可以从我的应用程序的全局范围内的任何地方访问它?我想在我的类中创建一个静态方法,然后调用 MyLogger::info("message");从任何地方。
      • 我在模块中有帮助代码。您可以创建一个模块并将公共库代码放在那里并与服务管理器共享,或者也可以创建一个供应商文件夹/模块。我没有在我的仓库中跟踪我的供应商文件夹,所以我选择了模块方式。
      • 我需要一些帮助...我需要静态调用 info()。不是通过实例化。所以我使用 ZfTool 创建了一个模块并将其命名为 MyLogger。我将 MyLogger 类代码文件放在 Logger/src/Entity 文件夹中。在我创建的类中:public static function info($message, $extra = array()) {parent::info($message, $extra);} 我打电话给Logger::info('Informational message'); 我得到:Fatal error: Cannot make non static method Zend\Log\Logger::info() static in class Logger\Entity\Logger in C:\...\1.0.0\module\Logger\src\Logger\Entity\logger.php on line 8
      • Zend 的 Logger::info() 是非静态的。所以我能想到的唯一方法是拥有一个静态 getInstance() 方法,它为您提供 Zend 的 Logger 对象(基本上是单例模式),您可以在 MyLogger::info() 中调用它。
      【解决方案3】:

      【讨论】:

      • 不完全。 Debug::dump 是 var_dump() 的接口,它在屏幕上向我显示数据。我想要的是通过使用类似 \Zend\Log\Logger::INFO('Informational message'); 的东西将消息写入日志文件,即“/logs/logfile.txt”。虽然最好只是 Logger::info("stuff");
      • 也许您可以通过这些找到自己的方式? :github.com/Soflomo/Loglogging.apache.org/log4php
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      相关资源
      最近更新 更多