Yii2 сохранить Войти в базу данных - PullRequest
0 голосов
/ 08 января 2019

У меня возникла проблема с Log с Yii2. Я устанавливаю цели журнала следующим образом:

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'flushInterval' => 1,//test
    'targets' => [
        [
          'class' => 'common\components\SaDbTarget',
          'levels' => ['error', 'warning','trace','info'],
          'exportInterval' => 1,//test
          //'categories' => ['application'],
          /*'except' => [
                'yii\db\*',
            ],*/
         ],
       ],
  ],

Я создаю свой SaDbTarget, расширяющий класс DbTarget, и это работает нормально, потому что я нашел в своей таблице какой-то журнал. После этого в контроллере я попытался установить лог таким образом

public function actionIndex(){
    $searchModel = new CategorySearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    Yii::trace('trace log', __METHOD__);
    Yii::warning('warning log');
    // here is the rest of the code
}

Я вижу эти 2 журнала на панели инструментов отладки, но не в моей таблице базы данных. По документам

Чтобы каждое сообщение журнала появлялось сразу в целях журнала, вы следует установить для flushInterval и exportInterval значение 1

Я пытался установить эти значения, но все еще не работает.

Я не знаю, что я делаю не так.

UPDATE Это мой SaDbTarget

namespace common\components;

use Yii;
use yii\log\DbTarget;
use yii\log\Logger;

class SaDbTarget extends DbTarget{ 

    //set custom table db for saving log
    public $logTable = 'authlog';

    //overwrite export();
    public function export(){

        $tableName = $this->db->quoteTableName($this->logTable);
        $sql = "INSERT INTO $tableName ([[authlog_login]], [[authlog_ip]], [[authlog_area]], [[authlog_act]], [[authlog_time]], [[authlog_data]])
            VALUES (:login, :ip, :area, :act, :time, :data )";

        $command = $this->db->createCommand($sql);

        //Get username
        $user=Yii::$app->user->getId();

        //Get user ip address
        $ip = Yii::$app->request->getUserIP();

        //Get area/controller
        $controller=Yii::$app->controller->uniqueId;

        //Get action
        $event= Yii::$app->controller->module->requestedAction->id;

        //Set timezone
        $time =  Yii::$app->formatter->asDate('now', 'php:Y-m-d H:i:s'); 

        //Set Data
        $data = $this->messages[0];

        $command->bindValues([
            ':login' => $user,
            ':ip' => $ip,
            ':area' => $controller,        
            ':act' => $event,
            ':time' => $time,
            ':data' => $data,
        ])->execute();
    }
...