| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- <?php
- /**
- * 阿里云日志服务路由
- */
- class AliyunLogHubRoute extends \CLogRoute
- {
- //阿里云日志hub配置
- private $_conf = [];
- //初始化
- public function init()
- {
- parent::init();
- $this->_conf = \Yii::app()->params['aliyunLogHub'];
- }
- public function processLogs($logs)
- {
- // if (LWM_ENV =='dev') { //debug环境,输出本地日志即可
- // $this->_localFileLog($logs);
- // return;
- // }
- $this->_conf = \Yii::app()->params['aliyunLogHub'];
- $logitems = array();
- $requestId = uniqid("lwm_", true);
- foreach ($logs as $log) {
- $logItem = new \Aliyun_Log_Models_LogItem();
- $logItem->setTime($log[3]);
- $logItem->setContents([
- 'request_id' => $requestId,
- 'ip' => $this->_getServerIp(),
- 'route' => Logger::$route,
- 'category' => $log[2],
- 'level' => $log[1],
- 'message' => $log[0],
- 'user_ip' => $this->GetIP(),
- ]);
- $logitems[] = $logItem;
- }
- $source = "";
- $client = new \Aliyun_Log_Client($this->_conf['endpoint'], $this->_conf['accessKeyId'], $this->_conf['accessKey']);
- $req = new \Aliyun_Log_Models_PutLogsRequest($this->_conf['project'], $this->_conf['logstore'], $this->_conf['topic'], $source, $logitems);
- try {
- $res = $client->putLogs($req);
- } catch (\Exception $e) {
- //有错误则本地输出日志
- $this->_localFileLog($logs);
- }
- }
- /**
- * 获取服务器 ip
- * @return string
- */
- private function _getServerIp()
- {
- if(isset($_SERVER['SERVER_ADDR']) && !empty($_SERVER['SERVER_ADDR']))
- return $_SERVER['SERVER_ADDR'];
- if (!isset($_SERVER['HOSTNAME'])) {
- return '';
- }
- return gethostbyname($_SERVER['HOSTNAME']);
- }
- /**
- * 获取用户真实IP
- */
- private function GetIP(){
- if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
- $ip = getenv("HTTP_CLIENT_IP");
- else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
- $ip = getenv("HTTP_X_FORWARDED_FOR");
- else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
- $ip = getenv("REMOTE_ADDR");
- else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
- $ip = $_SERVER['REMOTE_ADDR'];
- else
- $ip = "unknown";
- $ip = $ip != "unknown" ? explode(',',$ip) : '';
- return isset($ip[0]) ? $ip[0] : 'myunknown';
- }
- /**
- * 输出本地文件日志
- * @param $logs
- */
- private function _localFileLog($logs)
- {
- $fileRoute = new \CFileLogRoute();
- $fileRoute->init();
- $fileRoute->setMaxFileSize(10240);
- $fileRoute->setMaxLogFiles(20);
- $fileRoute->levels = $this->levels;
- $refClass = new \ReflectionClass($fileRoute);
- $method = $refClass->getMethod('processLogs');
- $method->setAccessible(true);
- $method->invoke($fileRoute, $logs);
- }
- }
|