\App\Http\HelpersLogContext

日志请求上下文采集

职责:日志体系(操作/登录/错误/拒绝/密码台账)共用的请求上下文取值收敛点—— trace_id 优先透传上游 X-Trace-Id 头、缺失时生成 UUID 并落请求属性; 会话标识取 token_id Cookie(与认证链路 md5Key 同源); IP/服务器/实例标识与敏感参数脱敏统一出口,避免各写入方取值漂移。

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 链路与会话 traceId / sessionId 分区 2 · 端点标识 clientIp / serverIp / instanceId 分区 3 · 请求参数 requestParams / maskSensitive └────────────────────────────────────────────────────────────┘

Summary

Methods
Properties
Constants
traceId()
sessionId()
sessionFingerprint()
commonFields()
clientIp()
serverIp()
instanceId()
ipLocation()
requestParams()
maskSensitive()
No public properties found
SENSITIVE_KEYS
No protected methods found
No protected properties found
N/A
isSensitiveKey()
No private properties found
N/A

Constants

SENSITIVE_KEYS

SENSITIVE_KEYS = ['password', 'password_confirmation', 'old_password', 'new_password', 'token', 'secret', 'salt']

需要脱敏的参数键(任意层级命中即掩码)

Methods

traceId()

traceId(\Illuminate\Http\Request  $request) : string

trace_id 生成并挂到请求属性(上游 X-Trace-Id 优先透传,缺失生成 UUID)。

Parameters

\Illuminate\Http\Request $request

Returns

string —

sessionId()

sessionId(\Illuminate\Http\Request  $request) : ?string

会话标识:token_id Cookie 优先、Bearer 次之(与认证链路 md5Key 同源)。

Parameters

\Illuminate\Http\Request $request

Returns

?string —

sessionFingerprint()

sessionFingerprint(?string  $sessionId) : ?string

会话指纹:md5Key 的不可逆派生(SHA-256 前 16 位)。

安全铁律:原始 token_id/md5Key 可直接作 Bearer 凭据通过认证, 一旦写入日志即构成会话劫持面。日志落库与登出/被踢回填匹配 (同源派生保持确定性)必须统一走本入口,禁止在日志表存原始值。

Parameters

?string $sessionId

Returns

?string —

commonFields()

commonFields(?\Illuminate\Http\Request  $request = null) : array

日志公共上下文(单源:操作/错误/拒绝/密码/登录五写点共用的请求级字段)。

返回:client_ip / user_agent(截断 500)/ server_ip / instance_id / trace_id / session_id(会话指纹,原始 token_id 禁止入日志)。 各写点再按表结构补充专属字段(ip_location / browser / os 等)。

Parameters

?\Illuminate\Http\Request $request

Returns

array —

clientIp()

clientIp(\Illuminate\Http\Request  $request) : string

客户端 IP(经 Laravel 可信代理解析)

Parameters

\Illuminate\Http\Request $request

Returns

string —

serverIp()

serverIp(\Illuminate\Http\Request  $request) : string

服务器 IP(CLI 内置服务器下为 0.0.0.0,属已知现状)

Parameters

\Illuminate\Http\Request $request

Returns

string —

instanceId()

instanceId() : string

实例标识:多机部署时经 .env INSTANCE_ID 区分,缺省为空(env 仅存在于 config 文件)

Returns

string —

ipLocation()

ipLocation(\Illuminate\Http\Request  $request) : string

IP 归属地:纯真库离线解析(库缺失/未命中安全返回空串)

Parameters

\Illuminate\Http\Request $request

Returns

string —

requestParams()

requestParams(\Illuminate\Http\Request  $request) : array

请求参数快照:GET/HEAD 取 query,其余取 body(写入前一律过脱敏)

Parameters

\Illuminate\Http\Request $request

Returns

array —

maskSensitive()

maskSensitive(mixed  $params) : mixed

递归脱敏:命中敏感键的值统一掩码;上传文件替换为元信息(防二进制不可序列化)。

Parameters

mixed $params

Returns

mixed —

isSensitiveKey()

isSensitiveKey(string  $key) : bool

敏感键判定:精确键名命中,或键名以敏感词结尾—— 覆盖配置保存请求的点分键(mail.smtp_password / sms.access_secret / sms.access_key / template.render_key 等),精确匹配无法命中此类键。 可经配置追加精确名单(log.mask_sensitive_keys_extra,逗号分隔)。

Parameters

string $key

Returns

bool —