107 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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;
 | 
						|
    }
 | 
						|
}
 |