Di Magento 1, adalah umum untuk mengelompokkan log ke dalam file yang berbeda (untuk memisahkan log untuk metode pembayaran, dll.). Itu semudah mengubah $file
parameter Mage::log
.
Magento 2 telah berubah untuk menggunakan Monolog.
Tampaknya Monolog (atau implementasi Magento2) mengelompokkan semua log untuk seluruh kerangka kerja ke penangan berdasarkan tingkat keparahannya. Ada beberapa penangan yang menulis ke file:
\Magento\Framework\Logger\Handler\Debug
, \Magento\Framework\Logger\Handler\Exception
,\Magento\Framework\Logger\Handler\System
Masuk ke masing-masing file di var / log seperti di Magento 1.
Saya bisa menambahkan handler untuk keparahan tertentu (yaitu, menulis pemberitahuan var/log/notice.log
). Perpanjang \Magento\Framework\Logger\Handler\Base
, dan daftarkan pawang masuk di.xml
.
Artikel ini secara kasar menjelaskan proses itu: http://semaphoresoftware.kinja.com/how-to-create-a-custom-log-in-magento-2-1704130912
Tetapi bagaimana cara saya menulis semua log (bukan hanya satu keparahan) untuk satu kelas (tidak semua Magento) ke file pilihan saya?
Sepertinya saya harus membuat versi saya sendiri Magento\Framework\Logger\Monolog
, tetapi kemudian bagaimana semuanya cocok agar itu benar-benar berfungsi?
Jika ini adalah no-no besar di Magento 2, lalu apa alternatifnya? Saya ingin sesuatu untuk memisahkan log untuk ekstensi ini untuk keperluan debugging ketika diperlukan di situs klien. Memiliki info yang ditulis ke system.log, exception.log, dll. Dan campur aduk dengan log dari setiap modul lainnya tidak praktis.
Kita bisa mencatat data dalam file seperti ini.
sumber
Cara sesederhana mungkin:
sumber
Selain jawaban Halk dan Pradeep Kumar: Jika memang satu-satunya masalah Anda adalah masuk ke file lain, ada cara yang sedikit lebih mudah. Terutama jika Anda ingin memasukkannya ke beberapa modul atau jika Anda ingin file log yang berbeda dalam modul Anda. Dengan metode ini, Anda tidak perlu membuat penangan khusus.
Dengan asumsi modul Anda ada di dalam
MyNamespace/MyModule
dan kelas, yang ingin Anda log masuk ke file kustom, dipanggilMyClass
. Jika konstruktor dari kelas sudah menyuntikkan\Psr\Log\LoggerInterface
lompat ke langkah 2). Kalau tidak, Anda perlu menyuntikkannya di konstruktor:1) Suntikkan LoggerInterface di kelas Anda
MyClass.php
:Jika Anda menambah kelas yang sudah menyertakan logger (seperti
\Magento\Framework\App\Helper\AbstractHelper
), Anda mungkin juga akan menimpa anggota itu (biasanya$_logger
) alih-alih menggunakan yang terpisah. Cukup tambahkan$this->_logger = $logger
setelah arahan konstruktor induk.2) Konfigurasikan logger melalui injeksi ketergantungan
etc/di.xml
:Ini akan mencatat semuanya
/var/log/mymodule.log
.Jika Anda perlu masuk ke file yang berbeda untuk kelas yang berbeda, Anda bisa membuat virtual logger lain dengan handler virtual lain dan menyuntikkannya ke kelas itu.
sumber
Jika Anda membutuhkannya dalam satu kelas saja:
sumber
Coba modul " praxigento / mage2_ext_logging ". Modul ini menambahkan dukungan "Monolog Cascade" ke Magento 2. "Monolog Cascade" memungkinkan Anda mengkonfigurasi output logging dengan file konfigurasi tunggal. Anda dapat mencetak log ke file yang berbeda, database, mengirim peringatan email dan lain-lain tanpa modifikasi kode Anda sendiri.
Ini adalah contoh file konfigurasi ('var / log / logging.yaml' secara default):
sumber
Jika tidak ada perubahan logika dan hanya perlu mengubah nama file log kustom maka tidak perlu membuat kelas logger kustom juga cukup ikuti langkah-langkah di bawah ini
1. di di.xml
2. Penangan
dimanapun Anda perlu untuk login data yang Anda butuhkan untuk memanggil log PSR default
itu
jadi contoh di atas akan mencatat semua data debug ke test.log jika Anda perlu mengubah sistem juga Anda dapat menambahkan baris di bawah ini di.xml
sumber
Saya mencoba ini di bawah kode objek logger dalam modul pihak ketiga di mana saya ingin mendapatkan info log di sana saya menempatkan dan memasukkannya ke file custom.log, periksa kode ini, Anda pasti mendapatkan log ke file log kustom Anda.
Jika Anda memerlukan komentar informasi lebih lanjut di sini, saya akan menjawab. Terima kasih.
sumber