Rumah  >  Artikel  >  rangka kerja php  >  Sistem pengelogan dalam rangka kerja Yii: merakam peristiwa aplikasi

Sistem pengelogan dalam rangka kerja Yii: merakam peristiwa aplikasi

WBOY
WBOYasal
2023-06-21 15:42:301217semak imbas

Dalam rangka kerja Yii, terdapat sistem pengelogan lengkap yang boleh merekodkan peristiwa aplikasi supaya pembangun boleh menjalankan penyahpepijatan dan analisis prestasi. Artikel ini akan memperkenalkan penggunaan asas sistem pembalakan dalam rangka kerja Yii dan beberapa teknik praktikal.

  1. Mengkonfigurasi komponen log

Rangka kerja Yii menggunakan fail sebagai kaedah penyimpanan log secara lalai. Hanya konfigurasikan komponen log dalam fail konfigurasi. Berikut ialah contoh konfigurasi mudah:

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'targets' => [
        [
            'class' => 'yiilogFileTarget',
            'levels' => ['error', 'warning'],
            'logFile' => '@runtime/logs/app.log',
        ],
    ],
],

di mana, traceLevel merujuk kepada tahap log yang direkodkan oleh rangka kerja Yii dalam mod debug Lebih tinggi tahap, lebih banyak maklumat terperinci direkodkan. targets ialah tatasusunan yang boleh mengkonfigurasi berbilang sasaran log Dalam contoh ini, hanya terdapat satu sasaran, iaitu menulis log peringkat error dan warning ke fail @runtime/logs/app.log.

  1. Rekod maklumat log

Sangat mudah untuk merekod maklumat log dalam kod Anda boleh menggunakan fungsi pintasan yang disediakan oleh rangka kerja Yii, contohnya:

Yii::info('This is an info message.');
Yii::warning('This is a warning message.');
Yii::error('This is an error message.');

Fungsi pintasan , info, warning dan error masing-masing sepadan dengan tiga peringkat log. Anda boleh memilih untuk menggunakannya mengikut situasi.

Apabila merekodkan log, selain daripada merekodkan rentetan secara langsung, anda juga boleh menggunakan data yang boleh diganti, yang diwakili oleh ruang letak {}. Contohnya:

Yii::info('User {username} registered successfully.', ['username' => 'John']);

Pada masa ini, {username} akan digantikan dengan 'John'. Kelebihan ini ialah maklumat log lebih terperinci dan lebih mudah untuk menyelesaikan masalah.

  1. Menggunakan maklumat kontekstual

Sistem pembalakan rangka kerja Yii menyokong penggunaan maklumat kontekstual untuk merekodkan maklumat log yang lebih terperinci. Maklumat konteks termasuk beberapa data tambahan, seperti maklumat pengguna semasa, parameter permintaan, dsb. Apabila merekodkan log, anda boleh menambah maklumat kontekstual dengan menetapkan parameter $context, contohnya:

Yii::warning('Invalid user input', ['category' => 'appcontrollersMyController', 'action' => 'create', 'params' => $_POST]);

Dalam kod di atas, kami menggunakan 3 maklumat kontekstual, iaitu kelas pengawal yang dimiliki dan yang diminta. kaedah dan parameter permintaan. Ini akan memberikan pemahaman yang lebih jelas tentang tempat log berlaku dan maklumat permintaan khusus.

  1. Penapisan dan pengelasan

Dalam aplikasi sebenar, kami mungkin tidak mahu merekodkan semua maklumat log. Sistem log rangka kerja Yii menyediakan mekanisme penapisan dan pengelasan yang boleh menapis dan mengklasifikasikan mesej log berdasarkan syarat.

Dalam konfigurasi, anda boleh menetapkan atribut categories untuk mengklasifikasikan mesej log, contohnya:

'log' => [
    'targets' => [
        [
            'class' => 'yiilogFileTarget',
            'categories' => ['appcontrollersMyController'],
            'logFile' => '@runtime/logs/mycontroller.log',
        ],
    ],
],

Dalam konfigurasi di atas, kami hanya merekodkan maklumat log daripada pengawal appcontrollersMyController dan akan Mereka ditulis ke @runtime/logs/mycontroller.log fail.

Selain klasifikasi, kami juga boleh menggunakan fungsi untuk menapis mesej log, contohnya:

'log' => [
    'targets' => [
        [
            'class' => 'yiilogFileTarget',
            'levels' => ['error'],
            'logFile' => '@runtime/logs/app.log',
            'logVars' => [],
            'except' => [
                'yiiwebHttpException:404',
            ],
        ],
    ],
],

Dalam konfigurasi di atas, kami hanya merekodkan error maklumat log peringkat, sambil mengabaikan semua Kontekstual maklumat. Kami menggunakan atribut except untuk menentukan mesej log untuk diabaikan. Dalam contoh ini, kami mengabaikan semua mesej ralat 404.

  1. Sasaran log tersuai

Sistem pengelogan rangka kerja Yii membolehkan kami menyesuaikan sasaran log, seperti menghantar mesej log ke e-mel, pangkalan data atau log pihak ketiga perkhidmatan, dsb. Apabila kita perlu menyesuaikan sasaran log, kita perlu mewarisi kelas yiilogTarget dan melaksanakan kaedah export. Contohnya:

class EmailTarget extends yiilogTarget
{
    public $to;

    public function export()
    {
        foreach ($this->messages as $message) {
            mail($this->to, $message[0], $message[1]);
        }
    }
}

Dalam kod di atas, kami mentakrifkan sasaran e-mel tersuai dan melaksanakan kaedah export. Dalam kaedah export, kami menggunakan fungsi mail untuk menghantar mesej log ke peti mel yang ditentukan.

Dalam aplikasi praktikal, kami boleh menulis sasaran log yang berbeza mengikut keperluan untuk memenuhi keperluan storan log yang berbeza.

Ringkasan

Sistem pengelogan rangka kerja Yii ialah komponen yang sangat praktikal yang boleh membantu pembangun menjejaki peristiwa aplikasi untuk analisis penyahpepijatan dan prestasi yang lebih baik. Apabila menggunakan sistem pengelogan, kita perlu memahami konfigurasi dan penggunaan asas, serta beberapa petua praktikal, seperti menggunakan maklumat kontekstual, pengelasan dan penapisan, menyesuaikan sasaran log, dan sebagainya. Hanya dengan pemahaman yang mendalam dan penggunaan sistem log yang fleksibel kita boleh menyelesaikan masalah log dengan lebih baik dan meningkatkan kualiti dan prestasi aplikasi.

Atas ialah kandungan terperinci Sistem pengelogan dalam rangka kerja Yii: merakam peristiwa aplikasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn