Yii2 将登录保存到数据库



我对 Yii2 的日志有一些问题。我以这种方式设置日志目标:

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'flushInterval' => 1,//test
    'targets' => [
        [
          'class' => 'commoncomponentsSaDbTarget',
          'levels' => ['error', 'warning','trace','info'],
          'exportInterval' => 1,//test
          //'categories' => ['application'],
          /*'except' => [
                'yiidb*',
            ],*/
         ],
       ],
  ],

我创建了扩展 DbTarget 类的 SaDbTarget,这工作正常,因为我在我的表中发现了一些日志。之后,在控制器中,我尝试以这种方式设置日志

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 个日志,但不在我的数据库表中。根据文档

要使每条日志消息立即显示在日志目标中,您需要 应将刷新间隔和导出间隔都设置为 1

我尝试设置此值,但仍然不起作用。

我不知道我做错了什么。

更新这是我的SaDbTarget

namespace commoncomponents;
use Yii;
use yiilogDbTarget;
use yiilogLogger;
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();
    }

你能检查一下"日志"组件是否在引导程序上设置吗?我认为这可能是调度程序未设置且未拾取目标的问题。

所以引导程序应该看起来像

 [
    'bootstrap' => ['log'],
    'components' => [
       'log' => [
          ...
       ],    
     ....       
 ]

另一种方法是检查调试器中记录器上的调度程序是否正确配置。

最新更新