سؤال

في Magento 1، إذا أردت إرسال رسالة إلى السجلات، يمكنك استخدام طريقة ثابتة على المستوى العالمي Mage فصل.

Mage::log($message, Zend_Log::DEBUG, "my-log-file.log");

هل هناك ما يعادله في ماجنتو 2؟لدي بحثت في جوجل من خلال موقع مستندات التطوير ولم أر أي شيء واضح ينبثق.هناك هذا انتشو مقال، ولكنه منذ عام تقريبًا وقد تغير الكثير منذ ذلك الحين.

باعتباري أحد مطوري وحدات Magento 2، إذا كنت أرغب في استبدال التعليمات البرمجية كما يلي في Magento 1

Mage::log($message, Zend_Log::DEBUG, "my-log-file.log");

ما هو الحد الأدنى الذي يجب أن أفعله؟

هل كانت مفيدة؟

المحلول

giveacodicetagpre.

تستخدم التصحيح، استثناء، نظام مسجل PSR على سبيل المثال:

giveacodicetagpre.

نصائح أخرى

في Magento2، يمكنك أيضا الكتابة إلى السجلات باستخدام مكتبة GransoSodicetAgcode مثل أدناه:

giveacodicetagpre.

تحرير

يمكنك أيضا طباعة كائنات PHP ومصفوفات مثل أدناه:

giveacodicetagpre.

giveacodicetagpre.

اقرأ المزيد لدى: blog.magePrince.com

سجل الطباعة المؤقت مع ملف جديد

giveacodicetagpre.

طريقة المصنع

تحتاج إلى حقن \ psr \ log \ loggerInterface class إلى منشئ لاستدعاء كائن المسجل

giveacodicetagpre.

أو يمكنك استخدام هذا الرمز مباشرة في ملف PHTML:

إلى إخراج سلسلة الطباعة في Debug.log

giveacodicetagpre.

لإخراج صفيف الطباعة في system.log

giveacodicetagpre.

إذا كنت ترغب في استخدام المسجل الافتراضي ولكن ملف مخصص لتسجيل (أو غيرها من المنطق المخصص) تحتاج إلى استخدام معالج مسجل مخصص:

giveacodicetagpre.

ثم قم بإضافته كمعالج في مكان ما داخل الرمز الخاص بك:

giveacodicetagpre.

خطوة مرة أخرى في الراحة IMO

بطريقة بسيطة، إذا كنت لا ترغب في إنشاء حقن التبعية أو أي شيء آخر استخدم الكود أدناه، فسيتم تخزين تسجيل الدخول system.log ملف

$logger = \Magento\Framework\App\ObjectManager::getInstance()->get(\Psr\Log\LoggerInterface::class);
$logger->info('message');

هذا كل شئ..

لا، لا يوجد أي ما يعادل مباشر.انها معقدة بعض الشيء الآن.

شاهد: تسجيل الدخول إلى ملف مخصصفي Magento 2

قم بتضمين فئة مسجل psr في ملفك باستخدام يستخدم ثم اتصل addDebug() طريقة.سيؤدي هذا إلى طباعة رسالة تسجيل الدخول var/log/debug.log ملف

use Psr\Log\LoggerInterface;

class demo {
  function demo()
  {
    //EDIT: Using debug instead of addDebug for PSR compatiblity
    $this->_objectManager->get('Psr\Log\LoggerInterface')->debug("your message goes here");
  }

}

تم التحديث: 19/08/2019

إذا كنت تبحث عن معالج سجل مخصص أنيق، أوصي بك باستخدام أنواع افتراضية (التي لا تحتاج إلى إضافة أي رمز PHP)

مستوحاة من إجابة petar dzhambazov و هالك ، السيدات والسادة، لقد قدمت لك طريقة أفضل وأقصر بدلا من رمز السجل المخصص المكرر في كل وقت.

stackoverflow \ سبيل المثال \ etc \ di.xml

giveacodicetagpre.

الاستخدام

pendor \ something \ model \ donaldtrump.php

giveacodicetagpre.

stackoverflow \ سبيل المثال \ etc \ frontend \ di.xml

giveacodicetagpre.

هذا كل شيء، لا توجد ملفات أو خطوط PHP إضافية - استخدم مزايا Magento 2: أنواع افتراضية !!!

نأمل أن يساعد هذا؛)

يوجد تحديث واحد للمسجل في 2.2.يمكنك تمكين المسجل لوضع الإنتاج عن طريق تشغيل SQL:

 "INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', '0', 'dev/debug/debug_logging', '1');"

ثم يمكنك استخدام \Psr\Log\LoggerInterface لسجل الطباعة تمامًا مثل الإجابات المذكورة أعلاه:

protected $logger;

public function __construct(
  \Psr\Log\LoggerInterface $logger
) {
    $this->logger = $logger;
  }

public function yourFunction() {
    $data = ["test" => "testing"];
    $this->logger->debug(var_export($data, true));
}
  1. حقن $logger فئة في المنشئ \Psr\Log\LoggerInterface $logger
    يتم تحقيق ذلك عن طريق تمرير $logger كوسيطة.

  2. تهيئة $logger في البناء

    $this->logger = $logger
    
  3. في الوظيفة داخل الفصل الذي تريد تسجيله، استخدم السطر أدناه

    $this->logger->debug($message);
    $this->logger->log($level, $message);
    

إذا كنت في حاجة إليها داخل فئة واحدة مع ملف سجل مخصص:

giveacodicetagpre.

ضع رمز مسجل PSR في منشئك:

giveacodicetagpre.

ثم يمكنك استخدامها في وظيفتك مثل:

giveacodicetagpre.

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