init
This commit is contained in:
		
							
								
								
									
										106
									
								
								Loger.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								Loger.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace dominion\log;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Yii;
 | 
				
			||||||
 | 
					use yii\log\FileTarget;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Loger extends FileTarget
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public $logVars = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public $format = 'result';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static function log($type, $result, $prefixFile = '', $log = false)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $config = Yii::$app->params['log'];
 | 
				
			||||||
 | 
					        if ($type == 'error' || YII_DEBUG || $log)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            $model = new Loger;
 | 
				
			||||||
 | 
					            $model->maxFileSize = isset($config['maxFileSize']) ? $config['maxFileSize'] : 10;
 | 
				
			||||||
 | 
					            $model->maxLogFiles = isset($config['maxLogFiles']) ? $config['maxLogFiles'] : 10000;
 | 
				
			||||||
 | 
					            $model->enableRotation = isset($config['enableRotation']) ? (bool)$config['enableRotation'] : true;
 | 
				
			||||||
 | 
					            $dir = Yii::getAlias($config['dir']);
 | 
				
			||||||
 | 
					            $model->logFile = $dir . $prefixFile . (empty($prefixFile) ? $type : ucfirst($type) ) . '.log';
 | 
				
			||||||
 | 
					            $model->messages = [$result];
 | 
				
			||||||
 | 
					            $model->export();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (isset($config['longRequestTime'], $result['time']) && $result['time'] > $config['longRequestTime'])
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $model = new Loger;
 | 
				
			||||||
 | 
					            $model->maxFileSize = isset($config['maxFileSize']) ? $config['maxFileSize'] : 10;
 | 
				
			||||||
 | 
					            $model->maxLogFiles = isset($config['maxLogFiles']) ? $config['maxLogFiles'] : 10000;
 | 
				
			||||||
 | 
					            $model->enableRotation = isset($config['enableRotation']) ? (bool)$config['enableRotation'] : true;
 | 
				
			||||||
 | 
					            $dir = Yii::getAlias($config['dir']);
 | 
				
			||||||
 | 
					            $model->logFile = $dir . 'longRequestTime.log';
 | 
				
			||||||
 | 
					            $model->format = 'time';
 | 
				
			||||||
 | 
					            $model->messages = [$result['time']];
 | 
				
			||||||
 | 
					            $model->export();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function formatMessage($result)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $output = '';
 | 
				
			||||||
 | 
					        $url = '';
 | 
				
			||||||
 | 
					        $post = '';
 | 
				
			||||||
 | 
					        $jwt = 'console';
 | 
				
			||||||
 | 
					        $HTTP_X_REAL_IP = '';
 | 
				
			||||||
 | 
					        if(!is_a(Yii::$app->request, 'yii\console\Request'))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            $url = Yii::$app->request->url;
 | 
				
			||||||
 | 
					            $post = json_encode(Yii::$app->request->post(), JSON_UNESCAPED_UNICODE);
 | 
				
			||||||
 | 
					            $jwt = str_replace('Bearer ', '', Yii::$app->request->getHeaders()->get('Authorization'));
 | 
				
			||||||
 | 
					            $HTTP_X_REAL_IP = Yii::$app->request->getHeaders()->get('HTTP_X_REAL_IP');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        switch ($this->format)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            case 'time':
 | 
				
			||||||
 | 
					                $output = sprintf(
 | 
				
			||||||
 | 
					                    "[%s]\t%s\t%s\t%s",
 | 
				
			||||||
 | 
					                    date('Y-m-d H:i:s'),
 | 
				
			||||||
 | 
					                    $url,
 | 
				
			||||||
 | 
					                    json_encode($result, JSON_UNESCAPED_UNICODE),
 | 
				
			||||||
 | 
					                    $post
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 'json':
 | 
				
			||||||
 | 
					                $error = $result[0];
 | 
				
			||||||
 | 
					                if(is_a($error, 'Exception'))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    $message = $error->getMessage() . ' in '.$error->getFile().':'.$error->getLine();
 | 
				
			||||||
 | 
					                    $output = json_encode([
 | 
				
			||||||
 | 
					                        'date' => date('Y-m-d H:i:s'),
 | 
				
			||||||
 | 
					                        'url' => $url,
 | 
				
			||||||
 | 
					                        'message' => $message ,
 | 
				
			||||||
 | 
					                        'trace' => $error->getTraceAsString(),
 | 
				
			||||||
 | 
					                        'graphql' => $post,
 | 
				
			||||||
 | 
					                        'jwt' => $jwt,
 | 
				
			||||||
 | 
					                        'HTTP_X_REAL_IP' => $HTTP_X_REAL_IP
 | 
				
			||||||
 | 
					                    ], JSON_UNESCAPED_UNICODE);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  //  $output = print_r($result, true);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					           // var_dump($output);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 'result':
 | 
				
			||||||
 | 
					            default :
 | 
				
			||||||
 | 
					                $output = sprintf(
 | 
				
			||||||
 | 
					                    "[%s]\t%s\t%s\t%s",
 | 
				
			||||||
 | 
					                    date('Y-m-d H:i:s'),
 | 
				
			||||||
 | 
					                    $url,
 | 
				
			||||||
 | 
					                    $post,
 | 
				
			||||||
 | 
					                    json_encode($result, JSON_UNESCAPED_UNICODE)
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return $output;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										21
									
								
								composer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								composer.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "name": "dominion/log",
 | 
				
			||||||
 | 
					    "description": "Функционал для работы с log",
 | 
				
			||||||
 | 
					    "type": "yii2-extension",
 | 
				
			||||||
 | 
					    "keywords": ["yii2","extension"],
 | 
				
			||||||
 | 
					    "license": "MIT",
 | 
				
			||||||
 | 
					    "authors": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "name": "Rybkin Sasha",
 | 
				
			||||||
 | 
					            "email": "ribkin@dominion.ru"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "require": {
 | 
				
			||||||
 | 
					        "yiisoft/yii2": "~2.0.0"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "autoload": {
 | 
				
			||||||
 | 
					        "psr-4": {
 | 
				
			||||||
 | 
					            "dominion\\log\\": ""
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user