详解PHP的Yii框架中日志的相关配置及使用_php技巧
默认的日志是输出到protected/runtime/application.log
如果需要修改那么需要在main.php里面的 components 下面增加log配置,如下:
'preload' => array('log'),//这句也必须加上 'components' => array( 'log'=>array( 'class'=>'CLogRouter', 'routes'=>array( //这是一个文件route表示category为test开头的所有类型的输出都会记录到runtime/test.log下面 array( 'class'=>'CFileLogRoute', 'levels'=>'trace, info, debug, warn, error, fatal, profile', 'categories'=>'test.*', 'maxFileSize'=>1048576,//单文件最大1G 'logFile'=>'test.log', ), // // 开发过程中所有日志直接输出到浏览器了,这样不需要登录服务器看日志了 array( 'class' => 'CWebLogRoute', 'categories' => 'test.*', 'levels' => CLogger::LEVEL_PROFILE, 'showInFireBug' => true, 'ignoreAjaxInFireBug' => true, ), array( 'class' => 'CWebLogRoute', 'categories' => 'test.* ', ), array( 'class'=>'CEmailLogRoute', 'levels'=>'error, warning', 'emails'=>'admin@example.com', ), ), ), ),
这个log首先被记录在了内存中一个CLogger类的array中,然后会逐一的判断每个LogRoute,判断是否需要输出,注意是逐一判断,不是其中一个输出下一个就不管了。
拿上面的配置来说:
第一个CFileLogRoute,'categories'=>'test.*',levels里包含了info, test.xx满足条件,所以会执行,将这条log输出到test.log中,然后下一个CWebLogRoute, 'levels' => CLogger::LEVEL_PROFILE,。而这条log是info的,所以不会执行,再下一个CWebLogRoute,'categories' => 'test.* ',levels没指定,那就说不过滤,所以这个也会被执行,所以这条log将被输出到浏览器中。
二、profile功能
另外logger还有一个很强大的功能:profile,
Yii::beginProfile('blockID'); ...code block being profiled... Yii::endProfile('blockID');
这样就能测试这个code block的执行效率了,非常的方便啊。
更详细的配置查看:http://www.yiiframework.com/doc/api/1.1/CProfileLogRoute
然后还有一个很BUG的功能,Profiling SQL Executions
很多时候sql语句写的不好会非常影响效率的,但是要确定哪一条语句影响了效率就需要profiling了。YII也提供了这个bug级别的功能。
三、Yii::log()和Yii::trace()的使用
首先在config文件中设置log
'log'=>array( 'class'=>'CLogRouter', 'routes'=>array( array( 'class'=>'CFileLogRoute',//这表示把日志输出到文件中,下方有详细的 'levels'=>'error, warning', ), array( 'class'=>'CWebLogRoute',//这表示把日志显示在网页下方,下方有详细的 'levels'=>'trace, info, error, warning', 'categories'=>'cool.*,system.db.*', ), ), ),
日志路由class:
- CDbLogRoute: 将信息保存到数据库的表中。
- CEmailLogRoute: 发送信息到指定的 Email 地址。
- CFileLogRoute: 保存信息到应用程序 runtime 目录中的一个文件中。
- CWebLogRoute: 将 信息 显示在当前页面的底部。
- CProfileLogRoute: 在页面的底部显示概述(profiling)信息。
信息级别levels:
- trace: 这是在 Yii::trace 中使用的级别。它用于在开发中 跟踪程序的执行流程。
- info: 这个用于记录普通的信息。
- profile: 这个是性能概述(profile)。下面马上会有更详细的说明。
- warning: 这个用于警告(warning)信息。
- error: 这个用于致命错误(fatal error)信息。
分类categories:
可以自定义,但在输出函数里要对应才会被写入日志里
(例如上边写的是 cool.* 和 system.db.* ,就会把相应分类的信息写入日志,请结合下文来理解)
设置完了,就可以用写入日志的函数来记录了:
Yii::trace('My log message.','cool.pd'); //cool.pd属于cool.*分类,所以会被写入日志 Yii::log('My log message.','info','cool.collectpd'); //log定义级别为info,结合上文,第一个logclass会忽略,不会被写入文件,但会被第二个logclass接收,写入日志在网络下方显示。
trace()和log()的区别:
trace()只会在调试模式下生效,即开启debug的时候
trace()不分level,但log()能设置levels参数
四、调试sql query每个语句执行的耗时
在配置中的log下加上下面这个Route
//这个配置专门负责数据库操作的profile array( 'class'=>'CProfileLogRoute', 'levels' => CLogger::LEVEL_PROFILE, 'showInFireBug' => true, 'ignoreAjaxInFireBug' => true, 'categories' => 'system.db.* ', //只记录db的操作日志,其他的忽略 ),
然后在某个controller的某个action中加入:
Yii::beginProfile('db', 'pocketpet'); for($i=0;$i<1000;$i++){ $user = UserModel::model()->findByPk("1");//这里只要是数据库操作就行,这个只是个例子 }
Yii::endProfile('db', 'pocketpet');
在浏览器中访问这个action,记得先打开firebug,然后firebug中就能看到如下图的记录:
相同的query会进行归类,计算total和average,这个对于分析还是非常有帮助的。
也可以将db的日志写到文件,配置如下(不建议使用,还是到浏览器用firebug方便):
array( 'class'=>'CFileLogRoute', 'levels' => CLogger::LEVEL_PROFILE, 'categories' => 'system.db.* ', //只记录db的操作日志,其他的忽略 'logFile'=>'db.log', ),
当然,想要生效还得有下面两步配置:
1 . 记得在index.php, 中加入以下配置
$yii = dirname(__FILE__).'/../yii/framework/yii.php'; $config = dirname(__FILE__).'/protected/config/main.php'; defined('YII_DEBUG') or define('YII_DEBUG',true); defined('YII_DEBUG_SHOW_PROFILER') or define('YII_DEBUG_SHOW_PROFILER',true); //enable profiling defined('YII_DEBUG_PROFILING') or define('YII_DEBUG_PROFILING',true); //trace level defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3); //execution time defined('YII_DEBUG_DISPLAY_TIME') or define('YII_DEBUG_DISPLAY_TIME',false); require_once($yii); Yii::createWebApplication($config)->run();
2. 在main.php主配置文件里面,的components db 里将enableProfiling设置为true
'components' => array( 'db' => array( 'enableProfiling' => true, //这个是用来记录日志的,会记录每一条语句执行的时间 'enableParamLogging' => true,//true表示包括sql语句的参数在内的信息都会记录到日志里,非常详细 ), )

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
