كيفية تسجيل مثيل زند \ سجل في سيرفيسماناجر في زف 2
-
12-12-2019 - |
سؤال
وأنا أتساءل ما هي أفضل طريقة لبدء وإعادة استخدام مثيل المسجل من خلال سيرفيسماناجر في زف 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'
));
ربما استخدم مصنع مسجل مجردة للتكوين بدلا من المصنع العادي
giveacodicetagpre.
يرجى تجربة ذلك مرة أخرى باستخدام المسار المطلق \
giveacodicetagpre.قمت بإنشاء كائن كاتب كاتب قاعدة البيانات الافتراضي في Bootstrap الخاص بي وتسجيله في Servicemanager.
giveacodicetagpre.التزلجController هو مثيل "ServicelocatorawareInterface".لذلك يمكنني فقط الاتصال في جهاز التحكم الخاص بي
giveacodicetagpre.