ماجنتو 2:استبدال طريقة Mage::log؟
-
13-12-2019 - |
سؤال
في 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");
ما هو الحد الأدنى الذي يجب أن أفعله؟
المحلول
تستخدم التصحيح، استثناء، نظام مسجل PSR على سبيل المثال:
giveacodicetagpre.نصائح أخرى
في Magento2، يمكنك أيضا الكتابة إلى السجلات باستخدام مكتبة GransoSodicetAgcode مثل أدناه:
giveacodicetagpre.تحرير
يمكنك أيضا طباعة كائنات PHP ومصفوفات مثل أدناه:
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');
هذا كل شئ..
لا، لا يوجد أي ما يعادل مباشر.انها معقدة بعض الشيء الآن.
قم بتضمين فئة مسجل 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 و هالك ، السيدات والسادة، لقد قدمت لك طريقة أفضل وأقصر بدلا من رمز السجل المخصص المكرر في كل وقت.
giveacodicetagpre.stackoverflow \ سبيل المثال \ etc \ di.xml
الاستخدام
giveacodicetagpre.pendor \ something \ model \ donaldtrump.php
giveacodicetagpre.stackoverflow \ سبيل المثال \ etc \ frontend \ di.xml
هذا كل شيء، لا توجد ملفات أو خطوط 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));
}
حقن
$logger
فئة في المنشئ\Psr\Log\LoggerInterface $logger
يتم تحقيق ذلك عن طريق تمرير $logger كوسيطة.تهيئة
$logger
في البناء$this->logger = $logger
في الوظيفة داخل الفصل الذي تريد تسجيله، استخدم السطر أدناه
$this->logger->debug($message); $this->logger->log($level, $message);
إذا كنت في حاجة إليها داخل فئة واحدة مع ملف سجل مخصص:
giveacodicetagpre.ضع رمز مسجل PSR في منشئك:
giveacodicetagpre.ثم يمكنك استخدامها في وظيفتك مثل:
giveacodicetagpre.