我使用webman并開啟協(xié)程(Workerman\Events\Swoole::class),使用1個(gè)進(jìn)程跑,我在support\Request上加了一個(gè)getRequestId()和_requestId()的方法,這樣每次請(qǐng)求進(jìn)來(lái),就可以生成一個(gè)對(duì)應(yīng)的請(qǐng)求id(request_id),這樣我可以在日志上查找關(guān)于某個(gè)請(qǐng)求(request_id)究竟發(fā)生了什么事情,然后我做了以下測(cè)試(寫在后面),為何會(huì)有不同的結(jié)果?
namespace support;
/**
* Class Request
* @package support
*/
class Request extends \Webman\Http\Request
{
public function getRequestId(){
if(!isset($this->data['request_id'])){
$this->data['request_id']=self::_requestId();
}
return $this->data['request_id'];
}
private static function _requestId(){
//這里生成固定格式的xxxx-xxxxxxxx-xxxx-xxxx字符串
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomPart = '';
$length = 20;
for ($i = 0; $i < $length; $i++) {
$randomPart .= $characters[rand(0, strlen($characters) - 1)];
}
$request_id = sprintf('%s-%s-%s-%s',
substr($randomPart, 0, 4),
substr($randomPart, 4, 8),
substr($randomPart, 12, 4),
substr($randomPart, 16, 4)
);
return $request_id;
}
}
namespace app\controller;
use support\Log;
class IndexController{
public function test(Request $request){
$log = Log::channel('log2');
$id = $request->get('id');
$log->useLoggingLoopDetection(false);//取消日志深度檢測(cè)
sleep(3);
$log->info($request->getRequestId().'請(qǐng)求進(jìn)來(lái)['.$id.']');
return json(array('ok5'));
}
}
1.1、通過(guò)網(wǎng)址方式刷新同一個(gè)url 10次(https://網(wǎng)址/test?id=0),log記錄如下,對(duì)應(yīng)的request_id全部都是同一個(gè)(A4YW-7LIEBMUC-NPPM-RY4V)
[2025-03-05 11:31:30]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[0]
[2025-03-05 11:31:37]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[0]
[2025-03-05 11:43:24]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[0]
[2025-03-05 11:43:25]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[0]
[2025-03-05 11:43:26]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[0]
[2025-03-05 11:43:27]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[0]
[2025-03-05 11:43:27]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[0]
[2025-03-05 11:43:28]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[0]
[2025-03-05 11:43:28]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[0]
[2025-03-05 11:43:28]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[0]
(瀏覽器也沒有說(shuō)長(zhǎng)連接)
1.1、通過(guò)網(wǎng)址方式刷新同一個(gè)url,但不同的傳參(https://網(wǎng)址/test?id=xxx) 10次(id=1~10),log記錄如下,每一個(gè)請(qǐng)求的request_id都不一樣
[2025-03-05 11:53:13]log2.INFO: VTJD-9Y534GN6-7970-LCB6請(qǐng)求進(jìn)來(lái)[0]
[2025-03-05 11:54:18]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請(qǐng)求進(jìn)來(lái)[1]
[2025-03-05 11:54:21]log2.INFO: MFAC-HMRQUSA9-XMOR-HBFO請(qǐng)求進(jìn)來(lái)[2]
[2025-03-05 11:55:05]log2.INFO: T95Q-12Q526TB-6P13-LM05請(qǐng)求進(jìn)來(lái)[3]
[2025-03-05 11:55:11]log2.INFO: KU9G-3DMFRHSE-188W-Q27P請(qǐng)求進(jìn)來(lái)[4]
[2025-03-05 11:55:13]log2.INFO: 6YP6-AYWWTF7J-DWD3-ZU1C請(qǐng)求進(jìn)來(lái)[5]
[2025-03-05 11:55:16]log2.INFO: TLVQ-B9YEOCUK-L829-J8FL請(qǐng)求進(jìn)來(lái)[6]
[2025-03-05 11:55:17]log2.INFO: AJVA-J0F9DAUT-W5Z3-PW0M請(qǐng)求進(jìn)來(lái)[7]
[2025-03-05 11:55:19]log2.INFO: XM02-KIGW5L6E-AB9I-IN23請(qǐng)求進(jìn)來(lái)[8]
[2025-03-05 11:55:22]log2.INFO: YQ7F-Y0ZRGNQQ-V05H-DR4B請(qǐng)求進(jìn)來(lái)[8]
[2025-03-05 11:55:23]log2.INFO: 9FN1-64QRUGPY-U8OV-M2RU請(qǐng)求進(jìn)來(lái)[9]
[2025-03-05 11:55:26]log2.INFO: DC6Y-K5WAXRFT-2F22-JMAY請(qǐng)求進(jìn)來(lái)[10]
2、通過(guò)php的異步請(qǐng)求方式(GuzzleHttp\Client、GuzzleHttp\Promise)請(qǐng)求10次
[2025-03-05 11:47:01] log2.INFO: EH1E-ULZO34ZF-P0PK-Y484請(qǐng)求進(jìn)來(lái)[1]
[2025-03-05 11:47:01] log2.INFO: GWC6-WX7IQOIW-7HAH-FN41請(qǐng)求進(jìn)來(lái)[4]
[2025-03-05 11:47:01] log2.INFO: TSI6-YI5HDMFC-U34A-5DO9請(qǐng)求進(jìn)來(lái)[3]
[2025-03-05 11:47:01] log2.INFO: 0OF3-NYRENBZM-IRP9-I8AA請(qǐng)求進(jìn)來(lái)[2]
[2025-03-05 11:47:01] log2.INFO: V002-5QEY865H-D4EF-KRJW請(qǐng)求進(jìn)來(lái)[5]
[2025-03-05 11:47:01] log2.INFO: SLM9-I8Y0B5GV-KN0J-QZCB請(qǐng)求進(jìn)來(lái)[7]
[2025-03-05 11:47:01] log2.INFO: 2BQ7-HXZN2RBK-BERA-9ZRI請(qǐng)求進(jìn)來(lái)[8]
[2025-03-05 11:47:01] log2.INFO: VOJG-4FWBYMD8-SGTH-VTWC請(qǐng)求進(jìn)來(lái)[6]
[2025-03-05 11:47:01] log2.INFO: LQ2N-LL6YZJV4-VNQ4-EP1M請(qǐng)求進(jìn)來(lái)[9]
[2025-03-05 11:47:01] log2.INFO: JPPW-CXY8O1ZU-HVTP-KCWN請(qǐng)求進(jìn)來(lái)[0]
使用Context上下文獲取就不會(huì)出問(wèn)題
// 設(shè)置數(shù)據(jù)
Context::set('trace_id', 'XXXX-XXXX');
// 讀取數(shù)據(jù)
Context::get('trace_id')