سؤال

وأنا أتساءل ما هي أفضل طريقة لبدء وإعادة استخدام مثيل المسجل من خلال سيرفيسماناجر في زف 2.بالطبع يمكنني أن أفعل طريقة بسيطة لاستخدامها في أي فئة ، مثل:

public function getLogger () {
        $this->logger = new Logger();
        $this->logger->addWriter(new Writer\Stream('/log/cms_errors.log'));
        return $logger;
    }

لكنني كنت أتساءل ما هي أفضل طريقة لتسجيل هيكل مماثل في العالم.بي إتش بي.حتى الآن أستطيع

أضف ما يلي إلى العالمية.بي إتش بي

'Zend\Log'=>array(
        'timestampFormat' => 'Y-m-d',
        array(
            'writerName'   => 'Stream',
            'writerParams' => array(
                'stream'   => '/log/zend.log',
            ),
            'formatterName' => 'Simple',            
        ),
    ),

إذا حاولت استدعاء من خلال:

$this->getServiceLocator()->get('Zend\Log')

أحصل على :

Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for Zend\Log
هل كانت مفيدة؟

المحلول

أضف البيانات التالية إلى "global.php"

giveacodicetagpre.

ثم ستتمكن من الاتصال

giveacodicetagpre.

نصائح أخرى

بدلا من ذلك ، وأكثر أناقة ، هل يمكن إعداد مستمع السجل والحفاظ على المسجل الخاص بك فصل من التطبيق الخاص بك.ال EventManager هو عنصر قوي جدا و زف 2 هو في الأساس إطار الحدث مدفوعة الآن.

في الخاص بك module.php يمكنك إضافة شيء مثل:

// Setup the Zend Logger, pseudocode
$logger = new Logger;
$writer = new Writer;
$logger->addWriter($writer);

// Attach a logging listener for the log event on application level, working code
$events = StaticEventManager::getInstance();
$events->attach('*', 'log', function($event) use ($logger) {
    $target = get_class($event->getTarget());
    $message = $event->getParam('message', 'No message provided');
    $priority = (int) $event->getParam('priority', Logger::INFO);
    $message = sprintf('%s: %s', $target, $message);
    $logger->log($priority, $message);
});

ثم من أي مكان، على سبيل المثال.من وحدة تحكم ، يمكنك القيام به:

$this->getEventManager()->trigger('log', $this, array(
                                                       'priority' => 7, 
                                                       'message' => 'some log message'
                                                      ));

ربما استخدم مصنع مسجل مجردة للتكوين بدلا من المصنع العادي

http://Framework.zend.com/manual/2.2/en/modules/zend.mvc.services.html#zend-log-loggerabstractservice

giveacodicetagpre.

يرجى تجربة ذلك مرة أخرى باستخدام المسار المطلق \

giveacodicetagpre.

قمت بإنشاء كائن كاتب كاتب قاعدة البيانات الافتراضي في Bootstrap الخاص بي وتسجيله في Servicemanager.

giveacodicetagpre.

التزلجController هو مثيل "ServicelocatorawareInterface".لذلك يمكنني فقط الاتصال في جهاز التحكم الخاص بي

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top