溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在YII2框架中配置日志

發布時間:2021-05-25 16:22:18 來源:億速云 閱讀:178 作者:Leah 欄目:開發技術

這篇文章給大家介紹怎么在YII2框架中配置日志,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

我們在config/web.php中配置如下:

return [
	//log必須在bootstrap期間就被加載,便于及時調度日志消息到目標
	'bootstrap' => ['log'],

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

通過下面5個方法,來寫入我們自已的日志

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

怎么在YII2框架中配置日志

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

有些時候我們并不希望把所有日志寫在一起,我們會根據不同模塊來寫日志,這樣以便區分,這就需要用到日志的分類了。

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

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

通過如下方法,添加我們的日志

//警告
YII::warning('我是一條數據庫警告', 'db');
//錯誤
YII::error('我是一條數據庫錯誤', 'db');

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

由于上面的配置我們使用了DbTarget,我們還需要添加一張日志表,用于記錄我們的日志,進入項目目錄。運行如下命令:

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

怎么在YII2框架中配置日志

當然categories我們也可以指定為YII的類

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

然后我們操作一下數據庫,看是否日志記錄了。

<?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);
  }
}

怎么在YII2框架中配置日志

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

'log' => [
	'traceLevel' => YII_DEBUG ? 3 : 0,
	'targets' => [
		[
			'class' => 'yii\log\FileTarget',
			'levels' => ['error', 'warning'],
		],
		[
			//日志處理器類,這里我改用數據庫存日志了
			'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('我是錯誤!!!', 'db');

怎么在YII2框架中配置日志

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

消息的刷新和導出

'log' => [
	'traceLevel' => YII_DEBUG ? 3 : 0,
	//消息被存放在一個數組里,積累到一定數量,才會被刷新到日志target
	//通過flushInterval設置消息刷新到日志target的數量
	'flushInterval' => 100,
	'targets' => [
		[
			'class' => 'yii\log\FileTarget',
			'levels' => ['error', 'warning'],
		],
		[
			//日志處理器類,這里我改用數據庫存日志了
			'class' => 'yii\log\DbTarget',
			//當消息刷新到日志對象時,并不會立即導出,只有累積到一定數量才會導出
			//通過exportInterval來設置這個導出數量
			'exportInterval' => 100,
			'levels' => ['error', 'warning'],
			//定義分類
			'categories' => ['db'],
		],
	],
],

有人會問YII2設置flushInterval和exportInterval的作用是什么,因為在一些系統中日志的操作會很頻繁,如果頻繁的讀取文件或數據庫來寫日志,會造成嚴重的IO消耗,降低系統性能,這也是YII2的一個優化吧。

當然有些時候一些長時間在控制臺運行的程序,需要立即顯示日志,那么可以通過如下配置:

'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分別設為1。

有些時候我們需要人為的開啟和關閉某些日志目標,這時就需要我們為每個日志目標設個鍵,以區分。

'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'],
		],
	],
],

然后通過如下,進行開啟和關閉:

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

關于怎么在YII2框架中配置日志就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女