This commit is contained in:
Александр Рыбкин 2024-11-20 15:58:07 +03:00
commit 428729ebf7
2 changed files with 127 additions and 0 deletions

106
Loger.php Normal file
View 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
View 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\\": ""
}
}
}