濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > YII2框架中日志的配置與使用方法實(shí)例分析

YII2框架中日志的配置與使用方法實(shí)例分析

熱門標(biāo)簽:正規(guī)電銷機(jī)器人系統(tǒng) 重慶外呼電銷系統(tǒng)多少錢 邢臺(tái)400電話辦理 南寧電話外呼系統(tǒng)線路 辦理400電話哪家好點(diǎn) 嘟嘟云外呼系統(tǒng) 濟(jì)源百應(yīng)電銷機(jī)器人聯(lián)系方式 南京3D地圖標(biāo)注 咸陽(yáng)電銷

本文實(shí)例講述了YII2框架中日志的配置與使用方法。分享給大家供大家參考,具體如下:

YII2中給我們提供了非常方便的日志組件,只需要簡(jiǎn)單配置一下就可以使用。

我們?cè)赾onfig/web.php中配置如下:

return [
	//log必須在bootstrap期間就被加載,便于及時(shí)調(diào)度日志消息到目標(biāo)
	'bootstrap' => ['log'],

	'components' => [
		'log' => [
			//消息跟蹤級(jí)別,設(shè)置yii\log\Dispatcher::traceLevel屬性
			//YII_DEBUG開啟時(shí),日志消息被記錄時(shí),追加最多3個(gè)調(diào)用堆棧信息
			'traceLevel' => YII_DEBUG ? 3 : 0,
			//日志目標(biāo),可定義多個(gè)
			'targets' => [
				[
					//日志處理器類
					'class' => 'yii\log\FileTarget',
					//日志記錄的級(jí)別
					'levels' => ['error', 'warning'],
					//定義日志文件
					'logFile' => '@runtime/logs/test.log',
				],
			],
		],
	],
];

通過(guò)下面5個(gè)方法,來(lái)寫入我們自已的日志

//跟蹤
Yii::trace('我是一條跟蹤');
//消息
YII::info('我是一條消息');
//調(diào)試
YII::debug('我是一條調(diào)試');
//警告
YII::warning('我是一條警告');
//錯(cuò)誤
YII::error('我是一條錯(cuò)誤');

注意我們上面定義日志的levels為['error', 'warning'],所以日志只會(huì)記錄這兩個(gè)級(jí)別的信息。

有些時(shí)候我們并不希望把所有日志寫在一起,我們會(huì)根據(jù)不同模塊來(lái)寫日志,這樣以便區(qū)分,這就需要用到日志的分類了。

重新配置config/web.php如下:

'log' => [
	'traceLevel' => YII_DEBUG ? 3 : 0,
	'targets' => [
		[
			//日志處理器類,這里我改用數(shù)據(jù)庫(kù)存日志了
			'class' => 'yii\log\DbTarget',
			//日志記錄的級(jí)別
			'levels' => ['error', 'warning'],
			//追加上下文信息,默認(rèn)YII會(huì)包含PHP全局變量,這里我們不需要,設(shè)為空。
			'logVars' => [],
			//定義分類
			'categories' => ['db'],
		],
		[
			//日志處理器類,這里我改用數(shù)據(jù)庫(kù)存日志了
			'class' => 'yii\log\DbTarget',
			//日志記錄的級(jí)別
			'levels' => ['error', 'warning'],
			//追加上下文信息,默認(rèn)YII會(huì)包含PHP全局變量,這里我們不需要,設(shè)為空。
			'logVars' => [],
			//定義分類
			'categories' => ['pay'],
		],
	],
],

通過(guò)如下方法,添加我們的日志

//警告
YII::warning('我是一條數(shù)據(jù)庫(kù)警告', 'db');
//錯(cuò)誤
YII::error('我是一條數(shù)據(jù)庫(kù)錯(cuò)誤', 'db');

//警告
YII::warning('我是一條支付警告', 'pay');
//錯(cuò)誤
YII::error('我是一條支付錯(cuò)誤', 'pay');

由于上面的配置我們使用了DbTarget,我們還需要添加一張日志表,用于記錄我們的日志,進(jìn)入項(xiàng)目目錄。運(yùn)行如下命令:

yii migrate --migrationPath=@yii/log/migrations

當(dāng)然categories我們也可以指定為YII的類

'log' => [
	'traceLevel' => YII_DEBUG ? 3 : 0,
	'targets' => [
		[
			'class' => 'yii\log\FileTarget',
			'levels' => ['error', 'warning'],
		],
		[
			//日志處理器類,這里我改用數(shù)據(jù)庫(kù)存日志了
			'class' => 'yii\log\DbTarget',
			//日志記錄的級(jí)別,這里演示設(shè)為info
			'levels' => ['info'],
			//定義分類
			'categories' => ['yii\db\*'],
		],
	],
],

然后我們操作一下數(shù)據(jù)庫(kù),看是否日志記錄了。

?php

namespace app\controllers;

use YII;
use yii\db\Query;
use yii\web\Controller;

class TestController extends Controller
{
  public function actionTest()
  {
    $data = (new Query())->from('{{%user}}')
      ->where('id=:id', [':id' => '1'])
      ->all();

    var_dump($data);
  }
}

日志消息的格式化,我們可以自定義日志的前綴。

'log' => [
	'traceLevel' => YII_DEBUG ? 3 : 0,
	'targets' => [
		[
			'class' => 'yii\log\FileTarget',
			'levels' => ['error', 'warning'],
		],
		[
			//日志處理器類,這里我改用數(shù)據(jù)庫(kù)存日志了
			'class' => 'yii\log\DbTarget',
			'levels' => ['error', 'warning'],
			//定義分類
			'categories' => ['db'],
			//定義前綴
			'prefix' => function($message) {
				$uid = !empty(YII::$app->user->id) ? YII::$app->user->id : '-';
				$mid = !empty(YII::$app->module->id) ? YII::$app->module->id : '-';
				$cid = !empty(YII::$app->controller->id) ? YII::$app->controller->id : '-';
				$aid = !empty(YII::$app->controller->action->id) ? YII::$app->controller->action->id : '-';
				return "[{$uid}][{$mid}/{$cid}/{$aid}]";
			},
		],
	],
],

使用如下代碼,記錄日志,查看效果

YII::warning('我是警告!!!', 'db');
YII::error('我是錯(cuò)誤!!!', 'db');

由于沒(méi)有登陸和分模塊,所以沒(méi)獲取到用戶ID和模塊ID,不過(guò)控制器ID和方法ID都獲取到了。

消息的刷新和導(dǎo)出

'log' => [
	'traceLevel' => YII_DEBUG ? 3 : 0,
	//消息被存放在一個(gè)數(shù)組里,積累到一定數(shù)量,才會(huì)被刷新到日志target
	//通過(guò)flushInterval設(shè)置消息刷新到日志target的數(shù)量
	'flushInterval' => 100,
	'targets' => [
		[
			'class' => 'yii\log\FileTarget',
			'levels' => ['error', 'warning'],
		],
		[
			//日志處理器類,這里我改用數(shù)據(jù)庫(kù)存日志了
			'class' => 'yii\log\DbTarget',
			//當(dāng)消息刷新到日志對(duì)象時(shí),并不會(huì)立即導(dǎo)出,只有累積到一定數(shù)量才會(huì)導(dǎo)出
			//通過(guò)exportInterval來(lái)設(shè)置這個(gè)導(dǎo)出數(shù)量
			'exportInterval' => 100,
			'levels' => ['error', 'warning'],
			//定義分類
			'categories' => ['db'],
		],
	],
],

有人會(huì)問(wèn)YII2設(shè)置flushInterval和exportInterval的作用是什么,因?yàn)樵谝恍┫到y(tǒng)中日志的操作會(huì)很頻繁,如果頻繁的讀取文件或數(shù)據(jù)庫(kù)來(lái)寫日志,會(huì)造成嚴(yán)重的IO消耗,降低系統(tǒng)性能,這也是YII2的一個(gè)優(yōu)化吧。

當(dāng)然有些時(shí)候一些長(zhǎng)時(shí)間在控制臺(tái)運(yùn)行的程序,需要立即顯示日志,那么可以通過(guò)如下配置:

'log' => [
	'traceLevel' => YII_DEBUG ? 3 : 0,
	'flushInterval' => 1,
	'targets' => [
		[
			'class' => 'yii\log\FileTarget',
			'levels' => ['error', 'warning'],
		],
		[
			'class' => 'yii\log\FileTarget',
			'exportInterval' => 1,
			'levels' => ['error', 'warning'],
			//定義分類
			'categories' => ['db'],
		],
	],
],

將flushInterval和exportInterval分別設(shè)為1。

有些時(shí)候我們需要人為的開啟和關(guān)閉某些日志目標(biāo),這時(shí)就需要我們?yōu)槊總€(gè)日志目標(biāo)設(shè)個(gè)鍵,以區(qū)分。

'log' => [
	'traceLevel' => YII_DEBUG ? 3 : 0,
	'targets' => [
		'pay' => [
			'class' => 'yii\log\DbTarget',
			'levels' => ['error', 'warning'],
			'categories' => ['pay'],
		],
		'db' => [
			'class' => 'yii\log\DbTarget',
			'levels' => ['error', 'warning'],
			'categories' => ['db'],
		],
	],
],

然后通過(guò)如下,進(jìn)行開啟和關(guān)閉:

//關(guān)閉
Yii::$app->log->targets['db']->enabled = false;
//開啟
Yii::$app->log->targets['db']->enabled = true;

更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》

希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • yii2.0框架實(shí)現(xiàn)上傳excel文件后導(dǎo)入到數(shù)據(jù)庫(kù)的方法示例
  • YII2框架中查詢生成器Query()的使用方法示例
  • YII2框架中使用RBAC對(duì)模塊,控制器,方法的權(quán)限控制及規(guī)則的使用示例
  • YII2框架中behavior行為的理解與使用方法示例
  • YII2 全局異常處理深入講解

標(biāo)簽:通遼 南通 平頂山 唐山 河南 隴南 武漢 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《YII2框架中日志的配置與使用方法實(shí)例分析》,本文關(guān)鍵詞  YII2,框架,中,日志,的,配置,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《YII2框架中日志的配置與使用方法實(shí)例分析》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于YII2框架中日志的配置與使用方法實(shí)例分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    香河县| 武川县| 彭阳县| 郴州市| 凤山市| 韶山市| 汨罗市| 威远县| 上栗县| 乌拉特中旗| 宁国市| 探索| 克山县| 黄平县| 赤城县| 三亚市| 丹东市| 济源市| 朝阳区| 綦江县| 大兴区| 长汀县| 嫩江县| 靖安县| 新野县| 合肥市| 平潭县| 彩票| 定西市| 犍为县| 蓬莱市| 淮安市| 洛浦县| 陕西省| 宁国市| 甘德县| 昌图县| 汝阳县| 乐昌市| 万荣县| 防城港市|