您的位置:首页 > 编程语言 > PHP开发

yii中将log存入数据库是修改原有风格

2015-08-20 14:58 627 查看
YII是提供修改输出参数格式的,但是可供用户定制化的空间非常小。

如想把prefix中的userID和ip分别插入到数据库中不同的两列,就需要需改框架文件:

/basic/vendor/yiisoft/yii2/log/Target与/basic/vendor/yiisoft/yii2/log/DbTarget如下:

public function getMessagePrefixCustomized($message)
{
if ($this->prefix !== null) {
return call_user_func($this->prefix, $message);
}

if (Yii::$app === null) {
return '';
}

$request = Yii::$app->getRequest();
$ip = $request instanceof Request ? $request->getUserIP() : '-';

/* @var $user \yii\web\User */
$user = Yii::$app->has('user', true) ? Yii::$app->get('user') : null;
if ($user && ($identity = $user->getIdentity(false))) {
$userID = $identity->getId();
} else {
$userID = '-';
}

/* @var $session \yii\web\Session */
$session = Yii::$app->has('session', true) ? Yii::$app->get('session') : null;
$sessionID = $session && $session->getIsActive() ? $session->getId() : '-';

$results = array('ip' => $ip, 'userID' => $userID, 'sessionID' => $sessionID);
//return "[$ip][$userID][$sessionID]";
return $results;//原来是返回一个string这里返回一个数组
}


public function export()
{
$tableName = $this->db->quoteTableName($this->logTable);
$sql = "INSERT INTO $tableName ([[level]], [[category]], [[log_time]], [[message]], [[IP]], [[customerID]])
VALUES (:level, :category, :log_time, :message, :IP, :customerID)";//在这里修改在数据库中要显示的字段
$command = $this->db->createCommand($sql);
foreach ($this->messages as $message) {
list($text, $level, $category, $timestamp) = $message;
if (!is_string($text)) {
$text = VarDumper::export($text);
}
$command->bindValues([
':level' => $level,
':category' => $category,
':log_time' => date('Y-m-d H:i:s'),//如需修改时间戳格式在这里修改
':customerID' => $this->getMessagePrefixCustomized($message)['userID'],//从上边的函数里边的返回值
':IP' => $this->getMessagePrefixCustomized($message)['ip'],
':message' => $text,
])->execute();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: