diff --git a/library/think/log/driver/Socket.php b/library/think/log/driver/Socket.php index 058c1f17..b1712239 100644 --- a/library/think/log/driver/Socket.php +++ b/library/think/log/driver/Socket.php @@ -17,7 +17,7 @@ class Socket 'show_included_files' => false, 'error_handler' => false, //日志强制记录到配置的client_id - 'force_client_id' => '', + 'force_client_ids'=>array(), //限制允许读取日志的client_id 'allow_client_ids' => [], ]; @@ -29,6 +29,8 @@ class Socket 'page' => 'color:#40e2ff;background:#171717;', 'big' => 'font-size:20px;color:red;', ]; + + protected $_allowForceClientIds = array(); //配置强制推送且被授权的client_id /** * 架构函数 @@ -40,6 +42,10 @@ class Socket if (!empty($config)) { $this->config = array_merge($this->config, $config); } + if(isset($this->config['allow_client_id'])){ + //兼容旧配置 + $this->allow_client_ids=array_merge($this->allow_client_ids,[$this->config['allow_client_id']]); + } } public function save($logs = []) @@ -96,39 +102,75 @@ class Socket if (!$client_id = $this->getClientArg('client_id')) { $client_id = ''; } - if ($force_client_id = $this->config['force_client_id']) { - $client_id = $force_client_id; + + + if(!empty($this->_allowForceClientIds)) + { + //强制推送到多个client_id + foreach($this->_allowForceClientIds as $force_client_id) { + $client_id=$force_client_id; + $this->sendToClient($tabid, $client_id, $logs, $force_client_id); + } + } else { + $this->sendToClient($tabid, $client_id, $logs, ''); } - $logs = [ - 'tabid' => $tabid, - 'client_id' => $client_id, - 'logs' => $logs, - 'force_client_id' => $force_client_id, - ]; - $msg = json_encode($logs); - $address = '/' . $client_id; //将client_id作为地址, server端通过地址判断将日志发布给谁 - $this->send($this->config['host'], $msg, $address); + } - protected function check() + + /** + * 发送给指定客户端 + * @author Zjmainstay + * @param $tabid + * @param $client_id + * @param $logs + * @param $force_client_id + */ + protected function sendToClient($tabid, $client_id, $logs, $force_client_id) { + $logs=array( + 'tabid'=>$tabid, + 'client_id'=>$client_id, + 'logs'=>$logs, + 'force_client_id'=>$force_client_id, + ); + $msg=@json_encode($logs); + $address='/'.$client_id; //将client_id作为地址, server端通过地址判断将日志发布给谁 + $this->send($this->config['host'],$msg,$address); + } + + + protected static function check() { - $tabid = $this->getClientArg('tabid'); - //是否记录日志的检查 - if (!$tabid && !$this->config['force_client_id']) { + if(!$this->config['enable']) + { + return false; + } + $tabid=$this->getClientArg('tabid'); + //是否记录日志的检查 + if(!$tabid && !$this->config['force_client_ids']) + { return false; } //用户认证 - $allow_client_ids = $this->config['allow_client_ids']; - if (!empty($allow_client_ids)) { - if (!$tabid && in_array($this->config['force_client_id'], $allow_client_ids)) { + $allow_client_ids=$this->config['allow_client_ids']; + if(!empty($allow_client_ids)) + { + //通过数组交集得出授权强制推送的client_id + $this->_allowForceClientIds = array_intersect($allow_client_ids, $this->config['force_client_ids']); + if (!$tabid && count($this->_allowForceClientIds)) { return true; } - $client_id = $this->getClientArg('client_id'); - if (!in_array($client_id, $allow_client_ids)) { + $client_id=$this->getClientArg('client_id'); + if(!in_array($client_id,$allow_client_ids)) + { return false; } } + else + { + $this->_allowForceClientIds = $this->config['force_client_ids']; + } return true; }