CF_TOKEN=$(secret get CLOUDFLARE_API_TOKEN)CF_ACCOUNT=$(secret get CLOUDFLARE_ACCOUNT_ID)cd <uncaged-repo>/packages/worker
CLOUDFLARE_API_TOKEN="$CF_TOKEN"CLOUDFLARE_ACCOUNT_ID="$CF_ACCOUNT"\
npx wrangler tail --format json > /tmp/worker-logs.json 2>/dev/null &
sleep 3# 复现失败请求# ...
sleep 10;kill %1 2>/dev/null
python3 -c "
import sys, json
for line in open('/tmp/worker-logs.json'):
try:
e = json.loads(line.strip())
logs, excs = e.get('logs',[]), e.get('exceptions',[])
status = e.get('event',{}).get('response',{}).get('status','?')
if logs or excs or (isinstance(status,int) and status >= 400):
url = e.get('event',{}).get('request',{}).get('url','?')
print(f'[{status}] {url}')
for l in logs: print(f' LOG: {l.get(\"message\",l)}')
for x in excs: print(f' ERR: {x.get(\"message\",x)}')
except: pass
"
2. 收集前端状态
curl -s https://uncaged.shazhou.work/auth/session -b /tmp/uncaged-cookies.txt | python3 -m json.tool
curl -s https://uncaged.shazhou.work/scott/doudou/api/history -b /tmp/uncaged-cookies.txt | python3 -c "
import sys,json
for m in json.load(sys.stdin).get('history',[])[-3:]:
print(f' [{m[\"role\"]}] {str(m.get(\"content\",\"\"))[:100]}')
"