File log Symfony diformat dengan cara yang sama untuk semua lingkungan. Artinya dev.log
dioptimalkan untuk mesin, bukan manusia. Hasilnya adalah file log yang membengkak dengan informasi tidak berguna yang membuat Anda kurang produktif.
EasyLogHandler adalah penangan Monolog baru yang membuat file log ramah manusia. Ini dioptimalkan untuk menampilkan informasi log dengan cara yang jelas dan ringkas. Gunakan dalam lingkungan pengembangan untuk menjadi pengembang yang jauh lebih produktif.
Fitur
Instalasi
Konfigurasi dan Penggunaan
Ini adalah beberapa fitur terbaik EasyLogHandler dan perbandingannya dengan log Symfony default.
File log Symfony adalah aliran teks yang sangat besar. Saat Anda membukanya, Anda tidak dapat dengan mudah mengetahui kapan permintaan dimulai atau selesai dan pesan log mana yang dimiliki:
simfoni | EasyLogHandler |
---|---|
EasyLogHandler menyusun file log dengan cara yang berbeda:
Ia menambahkan header besar dan beberapa baris baru untuk memisahkan setiap log permintaan;
Jika permintaannya kurang signifikan (misalnya permintaan Assetic), headernya lebih ringkas dan menampilkan lebih sedikit informasi;
Pesan log dibagi secara internal sehingga Anda dapat lebih memahami bagian-bagiannya yang berbeda (permintaan, doktrin, keamanan, dll.)
Pertama-tama, EasyLogHandler tidak menampilkan stempel waktu di setiap pesan log. Di lingkungan dev
Anda tidak perlu mempedulikannya, jadi stempel waktu hanya ditampilkan satu kali untuk setiap grup pesan log.
simfoni | EasyLogHandler |
---|---|
Informasi extra
, yang disertakan dalam beberapa pesan log untuk menambahkan rincian lebih lanjut tentang log, hanya ditampilkan jika berbeda dari log sebelumnya. Sebaliknya, Symfony selalu menampilkan extra
untuk semua log, menghasilkan banyak informasi duplikat:
simfoni |
---|
EasyLogHandler |
---|
Penggunaan placeholder dalam pesan log menjadi semakin populer dan bukan nilai sebenarnya (mis. Matched route "{route}".
daripada Matched route "home".
) Ini bagus untuk mesin, karena mereka dapat mengelompokkan pesan serupa yang hanya berbeda dalam nilai pengganti.
Namun, bagi manusia, “fitur” ini meresahkan. Itu sebabnya EasyLogHandler secara otomatis mengganti placeholder apa pun yang disertakan dalam pesan log:
simfoni |
---|
EasyLogHandler |
---|
Elemen penting, seperti penghentian penggunaan dan pesan terkait keamanan, harus menonjol dalam file log untuk membantu Anda menemukannya secara instan. Namun, di Symfony semua log terlihat persis sama. Bagaimana Anda bisa mengetahui mana yang penting?
simfoni |
---|
(semua pesan terlihat persis sama) |
EasyLogHandler |
---|
(penghentian, peringatan, kesalahan, dan pesan keamanan menonjol) |
Pesan log biasanya berisi variabel terkait dalam context
dan properti extra
. Menampilkan konten variabel-variabel ini dalam file log selalu merupakan keseimbangan yang kuat antara keterbacaan dan keringkasan.
EasyLogHandler memutuskan cara menyejajarkan variabel-variabel ini secara dinamis bergantung pada setiap pesan log. Misalnya, parameter kueri Doctrine selalu disisipkan tetapi parameter permintaan disisipkan untuk permintaan yang tidak penting dan disarangkan untuk permintaan penting:
Ketika pesan log menyertakan jejak tumpukan kesalahan, Anda pasti ingin melihatnya. Namun, Symfony menampilkan jejak tumpukan secara inline, sehingga tidak mungkin untuk diperiksa. EasyLogHandler menampilkannya sebagai pelacakan tumpukan yang tepat:
simfoni |
---|
EasyLogHandler |
---|
Salah satu pengalaman yang paling membuat frustrasi ketika memeriksa file log adalah menerima banyak pesan berturut-turut yang berulang atau serupa. Mereka memberikan sedikit informasi dan hanya mengalihkan perhatian Anda. EasyLogHandler memproses semua pesan log sekaligus, bukan satu per satu, sehingga ia mengetahui bila ada log berurutan yang serupa.
Misalnya, ini adalah file log Symfony yang menampilkan tiga pesan terjemahan hilang berturut-turut:
Dan beginilah pesan yang sama ditampilkan oleh EasyLogHandler:
Perbedaannya bahkan lebih jelas terlihat pada pesan "pemberitahuan acara", yang biasanya menghasilkan puluhan pesan berturut-turut:
simfoni |
---|
EasyLogHandler |
---|
Proyek ini didistribusikan sebagai paket PHP dan bukan bundel Symfony, jadi Anda hanya perlu memerlukan proyek tersebut dengan Composer:
$ komposer memerlukan --dev easycorp/easy-log-handler
Tentukan layanan baru di aplikasi Anda untuk pengendali log ini:
Versi Symfony yang lebih baru:
# config/packages/dev/easy_log_handler.yamlservices:EasyCorpEasyLogEasyLogHandler:public: argumen palsu: ['%kernel.logs_dir%/%kernel.environment%.log']
Versi Symfony yang lebih lama:
# app/config/services.ymlservices:# ...easycorp.easylog.handler:class: EasyCorpEasyLogEasyLogHandlerpublic: argumen palsu: - '%kernel.logs_dir%/%kernel.lingkungan%.log'
Perbarui konfigurasi Monolog Anda di lingkungan dev
untuk menentukan penangan buffer yang menggabungkan layanan penangan baru ini (teruslah membaca untuk memahami alasannya). Anda dapat menyalin+menempelkan konfigurasi ini dengan aman:
Versi Symfony yang lebih baru:
# config/packages/dev/monolog.yamlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ['!event']level: debugeasylog:type: serviceid: EasyCorpEasyLogEasyLogHandler
Versi Symfony yang lebih lama:
# app/config/config_dev.ymlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ["!event"]level: debugeasylog:type: serviceid: easycorp.easylog.handler
Kebanyakan penangan log memperlakukan setiap pesan log secara terpisah. Sebaliknya, pemrosesan log tingkat lanjut EasyLogHandler mengharuskan setiap pesan log memperhatikan log lainnya (misalnya untuk menggabungkan pesan berurutan yang serupa). Ini berarti bahwa semua log yang terkait dengan permintaan tersebut harus ditangkap dan diproses secara batch.
Dalam konfigurasi di atas, pengendali buffered
menyimpan semua pesan log dan kemudian meneruskannya ke pengendali EasyLog, yang memproses semua pesan sekaligus dan menulis hasilnya dalam file log.
Gunakan pengendali buffered
untuk mengonfigurasi saluran yang dicatat/dikecualikan dan tingkat pesan yang dicatat.