GFSessionTraceUtility¶
API Reference / Standard / 类索引
- 路径:
addons/gf/standard/utilities/debug/gf_session_trace_utility.gd - 模块:
Standard - 继承:
GFUtility - API:
public - 类别:运行时服务 (
runtime_service) - 首次版本:
unreleased
有界的运行时会话轨迹记录器。 项目必须先显式注册通道,才能记录输入、路由、存档、网络或其他语义事件。 轨迹只保存经过技术脱敏和字节预算约束的结构化数据,不扫描场景树、节点属性或业务状态。 长期保存的会话上下文与目录 metadata 始终使用 privacy 安全下限,避免运行期切换 profile 后泄漏旧值。 项目仍需通过字段白名单排除账号、令牌和其他无法由通用编码器识别的业务秘密。
成员概览¶
| 类型 | 名称 | 签名 |
|---|---|---|
| 信号 | session_started |
signal session_started(session_id: StringName, context: Dictionary) |
| 信号 | session_stopped |
signal session_stopped(summary: Dictionary) |
| 信号 | event_recorded |
signal event_recorded(event: Dictionary) |
| 信号 | event_rejected |
signal event_rejected(channel_id: StringName, event_id: StringName, reason: StringName) |
| 常量 | DEFAULT_MAX_EVENTS |
const DEFAULT_MAX_EVENTS: int = 512 |
| 常量 | DEFAULT_MAX_EVENT_BUFFER_BYTES |
const DEFAULT_MAX_EVENT_BUFFER_BYTES: int = 1024 * 1024 |
| 常量 | DEFAULT_MAX_EVENT_BYTES |
const DEFAULT_MAX_EVENT_BYTES: int = 16 * 1024 |
| 常量 | DEFAULT_MAX_CHANNELS |
const DEFAULT_MAX_CHANNELS: int = 32 |
| 常量 | DEFAULT_MAX_SNAPSHOT_PROVIDERS |
const DEFAULT_MAX_SNAPSHOT_PROVIDERS: int = 32 |
| 常量 | DEFAULT_MAX_JOURNAL_EVENTS |
const DEFAULT_MAX_JOURNAL_EVENTS: int = 2048 |
| 常量 | REJECT_SESSION_INACTIVE |
const REJECT_SESSION_INACTIVE: StringName = &"session_inactive" |
| 常量 | REJECT_UNKNOWN_CHANNEL |
const REJECT_UNKNOWN_CHANNEL: StringName = &"unknown_channel" |
| 常量 | REJECT_CHANNEL_DISABLED |
const REJECT_CHANNEL_DISABLED: StringName = &"channel_disabled" |
| 常量 | REJECT_INVALID_EVENT_ID |
const REJECT_INVALID_EVENT_ID: StringName = &"invalid_event_id" |
| 常量 | REJECT_EVENT_TOO_LARGE |
const REJECT_EVENT_TOO_LARGE: StringName = &"event_too_large" |
| 常量 | REJECT_INVALID_PROVIDER |
const REJECT_INVALID_PROVIDER: StringName = &"invalid_provider" |
| 常量 | REJECT_PROVIDER_REENTRANT |
const REJECT_PROVIDER_REENTRANT: StringName = &"provider_reentrant" |
| 属性 | max_events |
var max_events: int = DEFAULT_MAX_EVENTS: |
| 属性 | max_event_buffer_bytes |
var max_event_buffer_bytes: int = DEFAULT_MAX_EVENT_BUFFER_BYTES: |
| 属性 | max_event_bytes |
var max_event_bytes: int = DEFAULT_MAX_EVENT_BYTES: |
| 属性 | max_channels |
var max_channels: int = DEFAULT_MAX_CHANNELS: |
| 属性 | max_snapshot_providers |
var max_snapshot_providers: int = DEFAULT_MAX_SNAPSHOT_PROVIDERS: |
| 属性 | max_journal_events |
var max_journal_events: int = DEFAULT_MAX_JOURNAL_EVENTS: |
| 属性 | redaction_profile |
var redaction_profile: String = GFReportValueCodec.REDACTION_PROFILE_PRIVACY |
| 方法 | dispose |
func dispose() -> void: |
| 方法 | start_session |
func start_session( requested_session_id: StringName = &"", context: Dictionary = {}, options: Dictionary = {} ) -> StringName: |
| 方法 | stop_session |
func stop_session(reason: StringName = &"completed") -> Dictionary: |
| 方法 | clear |
func clear() -> void: |
| 方法 | register_channel |
func register_channel(channel_id: StringName, options: Dictionary = {}) -> bool: |
| 方法 | unregister_channel |
func unregister_channel(channel_id: StringName) -> bool: |
| 方法 | has_channel |
func has_channel(channel_id: StringName) -> bool: |
| 方法 | set_channel_enabled |
func set_channel_enabled(channel_id: StringName, enabled: bool) -> bool: |
| 方法 | get_channel_catalog |
func get_channel_catalog() -> Dictionary: |
| 方法 | record_event |
func record_event( channel_id: StringName, event_id: StringName, payload: Variant = null, options: Dictionary = {} ) -> Dictionary: |
| 方法 | register_snapshot_provider |
func register_snapshot_provider( provider_id: StringName, channel_id: StringName, provider: Callable, options: Dictionary = {} ) -> bool: |
| 方法 | unregister_snapshot_provider |
func unregister_snapshot_provider(provider_id: StringName) -> bool: |
| 方法 | capture_snapshot_provider |
func capture_snapshot_provider(provider_id: StringName, options: Dictionary = {}) -> Dictionary: |
| 方法 | get_snapshot_provider_catalog |
func get_snapshot_provider_catalog() -> Dictionary: |
| 方法 | configure_journal_sink |
func configure_journal_sink(sink: GFLogSink, options: Dictionary = {}) -> bool: |
| 方法 | flush_journal |
func flush_journal() -> void: |
| 方法 | clear_journal_sink |
func clear_journal_sink(shutdown: bool = false) -> void: |
| 方法 | get_events |
func get_events(limit: int = 0, filters: Dictionary = {}) -> Array[Dictionary]: |
| 方法 | build_snapshot |
func build_snapshot(options: Dictionary = {}) -> Dictionary: |
| 方法 | get_debug_snapshot |
func get_debug_snapshot() -> Dictionary: |
信号¶
session_started¶
- API:
public - 首次版本:
unreleased
会话开始后发出。
参数:
| 名称 | 说明 |
|---|---|
session_id |
当前会话标识。 |
context |
已脱敏的会话上下文副本。 |
结构:
context: Dictionary,由项目定义并经过 GFReportValueCodec 隐私脱敏和预算限制。
session_stopped¶
- API:
public - 首次版本:
unreleased
会话停止后发出。
参数:
| 名称 | 说明 |
|---|---|
summary |
不含完整事件载荷的停止摘要。 |
结构:
summary: Dictionary,包含 session_id、active、stop_reason、event_count、event_bytes、dropped_event_count、rejected_event_count、journal_event_count 和 journal_dropped_event_count。
event_recorded¶
- API:
public - 首次版本:
unreleased
事件成功进入有界轨迹后发出。
参数:
| 名称 | 说明 |
|---|---|
event |
已脱敏的事件副本。 |
结构:
event: Dictionary,包含 schema_version、session_id、sequence、elapsed_usec、simulation_tick、channel_id、event_id、include_in_snapshot、payload 和 metadata。
event_rejected¶
- API:
public - 首次版本:
unreleased
事件被明确拒绝后发出。
参数:
| 名称 | 说明 |
|---|---|
channel_id |
请求记录的通道标识。 |
event_id |
请求记录的事件标识。 |
reason |
稳定拒绝原因。 |
常量¶
DEFAULT_MAX_EVENTS¶
- API:
public - 首次版本:
unreleased
默认最多保留的内存事件数量。
DEFAULT_MAX_EVENT_BUFFER_BYTES¶
- API:
public - 首次版本:
unreleased
默认内存事件缓冲总字节预算。
DEFAULT_MAX_EVENT_BYTES¶
- API:
public - 首次版本:
unreleased
默认单个事件字节预算。
DEFAULT_MAX_CHANNELS¶
- API:
public - 首次版本:
unreleased
默认最多允许注册的通道数量。
DEFAULT_MAX_SNAPSHOT_PROVIDERS¶
- API:
public - 首次版本:
unreleased
默认最多允许注册的同步快照 provider 数量。
DEFAULT_MAX_JOURNAL_EVENTS¶
- API:
public - 首次版本:
unreleased
默认单次会话最多写入 journal 的事件数量。
REJECT_SESSION_INACTIVE¶
- API:
public - 首次版本:
unreleased
拒绝原因:当前没有活动会话。
REJECT_UNKNOWN_CHANNEL¶
- API:
public - 首次版本:
unreleased
拒绝原因:通道未显式注册。
REJECT_CHANNEL_DISABLED¶
- API:
public - 首次版本:
unreleased
拒绝原因:通道当前被禁用。
REJECT_INVALID_EVENT_ID¶
- API:
public - 首次版本:
unreleased
拒绝原因:事件标识为空。
REJECT_EVENT_TOO_LARGE¶
- API:
public - 首次版本:
unreleased
拒绝原因:单个事件或总轨迹预算无法容纳事件。
REJECT_INVALID_PROVIDER¶
- API:
public - 首次版本:
unreleased
拒绝原因:快照 provider 不存在或失效。
REJECT_PROVIDER_REENTRANT¶
- API:
public - 首次版本:
unreleased
拒绝原因:快照 provider 发生重入调用。
属性¶
max_events¶
- API:
public - 首次版本:
unreleased
最多保留的内存事件数量。0 表示不保留新事件。
max_event_buffer_bytes¶
- API:
public - 首次版本:
unreleased
内存事件缓冲总字节预算。会话上下文和有界目录 metadata 不计入该预算。 0 表示不保留新事件。
max_event_bytes¶
- API:
public - 首次版本:
unreleased
单个事件字节预算;小于最小安全包络时会提升到最小值。
max_channels¶
- API:
public - 首次版本:
unreleased
最多允许注册的通道数量。降低上限不会隐式删除既有通道。
max_snapshot_providers¶
- API:
public - 首次版本:
unreleased
最多允许注册的同步快照 provider 数量。降低上限不会隐式删除既有 provider。
max_journal_events¶
- API:
public - 首次版本:
unreleased
单次会话最多写入 journal 的事件数量。0 表示禁用 journal 写入。
redaction_profile¶
- API:
public - 首次版本:
unreleased
事件载荷与单次 metadata 的报告脱敏 profile。默认使用 privacy,不应为线上玩家数据改成 debug。 会话上下文、通道 metadata 和 provider metadata 始终使用 privacy 安全下限。
方法¶
dispose¶
- API:
public - 首次版本:
unreleased
停止活动会话、刷新 journal 并释放所有注册数据。
start_session¶
- API:
public - 首次版本:
unreleased
func start_session( requested_session_id: StringName = &"", context: Dictionary = {}, options: Dictionary = {} ) -> StringName:
开始新的会话。已有活动会话会先以 restarted 原因停止。
参数:
| 名称 | 说明 |
|---|---|
requested_session_id |
可选的非敏感本地会话标识;为空时自动生成。该字段不会识别账号、令牌等业务秘密。 |
context |
项目显式提供的会话上下文。 |
options |
可选参数,支持 started_ticks_usec。 |
返回:实际会话标识。
结构:
context: Dictionary,由项目定义;进入轨迹前会使用 privacy 安全下限和字节预算编码。options: Dictionary,started_ticks_usec 可用于固定时钟或测试。
stop_session¶
- API:
public - 首次版本:
unreleased
停止当前会话并返回不含完整事件载荷的摘要。
参数:
| 名称 | 说明 |
|---|---|
reason |
项目定义的停止原因。 |
返回:会话摘要。
结构:
return: Dictionary,包含 session_id、active、stop_reason、event_count、event_bytes、dropped_event_count、rejected_event_count、journal_event_count 和 journal_dropped_event_count。
clear¶
- API:
public - 首次版本:
unreleased
清空内存事件和计数,但保留通道、provider、journal 与当前会话配置。
register_channel¶
- API:
public - 首次版本:
unreleased
注册一个允许记录的事件通道。未知通道始终 fail closed。
参数:
| 名称 | 说明 |
|---|---|
channel_id |
稳定通道标识。 |
options |
通道选项。 |
返回:注册或更新成功时返回 true。
结构:
options: Dictionary,可包含 enabled、include_in_snapshot、max_events、max_event_bytes 和 metadata;0 上限表示仅使用全局限制,metadata 始终使用 privacy 安全下限。
unregister_channel¶
- API:
public - 首次版本:
unreleased
注销事件通道。既有事件不会被删除。
参数:
| 名称 | 说明 |
|---|---|
channel_id |
通道标识。 |
返回:通道此前存在时返回 true。
has_channel¶
- API:
public - 首次版本:
unreleased
检查通道是否已显式注册。
参数:
| 名称 | 说明 |
|---|---|
channel_id |
通道标识。 |
返回:已注册时返回 true。
set_channel_enabled¶
- API:
public - 首次版本:
unreleased
启用或禁用已注册通道。
参数:
| 名称 | 说明 |
|---|---|
channel_id |
通道标识。 |
enabled |
新状态。 |
返回:通道存在并更新成功时返回 true。
get_channel_catalog¶
- API:
public - 首次版本:
unreleased
获取不含回调或事件载荷的通道目录。
返回:以通道 ID 为键的配置副本。
结构:
return: Dictionary[StringName, Dictionary],子字典包含 enabled、include_in_snapshot、max_events、max_event_bytes、event_count 和 metadata。
record_event¶
- API:
public - 首次版本:
unreleased
func record_event( channel_id: StringName, event_id: StringName, payload: Variant = null, options: Dictionary = {} ) -> Dictionary:
记录一个显式通道事件。
参数:
| 名称 | 说明 |
|---|---|
channel_id |
已注册通道标识。 |
event_id |
项目定义的稳定事件标识。 |
payload |
项目显式提供的事件载荷。 |
options |
记录选项。 |
返回:结构化记录结果。
结构:
payload: Variant,由项目定义;进入轨迹前会按当前 redaction_profile 和单事件字节预算编码为 JSON-safe 值。options: Dictionary,可包含 ticks_usec、simulation_tick 和 metadata;metadata 会与通道 metadata 合并后脱敏。return: Dictionary,成功时包含 ok、event 和 dropped_event_count;失败时包含 ok=false 与 reason。
register_snapshot_provider¶
- API:
public - 首次版本:
unreleased
func register_snapshot_provider( provider_id: StringName, channel_id: StringName, provider: Callable, options: Dictionary = {} ) -> bool:
注册一个由项目显式触发的同步快照 provider。 Provider 必须是无参数、快速、同步且不会修改游戏状态的 Callable;GF 不会自动轮询它。
参数:
| 名称 | 说明 |
|---|---|
provider_id |
provider 稳定标识。 |
channel_id |
provider 结果写入的已注册通道。 |
provider |
无参数同步 Callable。 |
options |
provider 选项。 |
返回:注册或更新成功时返回 true。
结构:
options: Dictionary,可包含 enabled、event_id 和 metadata;metadata 始终使用 privacy 安全下限。
unregister_snapshot_provider¶
- API:
public - 首次版本:
unreleased
注销同步快照 provider。
参数:
| 名称 | 说明 |
|---|---|
provider_id |
provider 标识。 |
返回:provider 此前存在时返回 true。
capture_snapshot_provider¶
- API:
public - 首次版本:
unreleased
显式调用一个同步快照 provider 并把结果记录为事件。
参数:
| 名称 | 说明 |
|---|---|
provider_id |
provider 标识。 |
options |
传给 record_event() 的 ticks_usec、simulation_tick 和附加 metadata。 |
返回:record_event() 结构化结果。
结构:
options: Dictionary,可包含 ticks_usec、simulation_tick 和 metadata。return: Dictionary,成功时包含 ok、event 和 dropped_event_count;失败时包含 ok=false 与 reason。
get_snapshot_provider_catalog¶
- API:
public - 首次版本:
unreleased
获取同步快照 provider 目录,不包含 Callable 本身。
返回:以 provider ID 为键的配置副本。
结构:
return: Dictionary[StringName, Dictionary],子字典包含 channel_id、event_id、enabled 和 metadata。
configure_journal_sink¶
- API:
public - 首次版本:
unreleased
配置可选 journal sink。GF 不会默认创建文件或上传边界。 当前 redaction_profile 必须不弱于 sink 声明的输出 profile;运行期若被改弱,后续 journal 事件会 fail closed。 若使用专用 GFJsonLineLogSink,可通过 options.initialize 与 shutdown_on_dispose 让当前工具拥有其生命周期。
参数:
| 名称 | 说明 |
|---|---|
sink |
接收已脱敏事件的 sink;传入 null 表示清除。 |
options |
journal 生命周期选项。 |
返回:sink 的输出 profile 与当前轨迹 profile 兼容且配置成功,或已成功清除时返回 true。
结构:
options: Dictionary,可包含 initialize、shutdown_on_dispose 和 flush_after_write。
flush_journal¶
- API:
public - 首次版本:
unreleased
刷新当前 journal sink。
clear_journal_sink¶
- API:
public - 首次版本:
unreleased
清除 journal sink,并可选关闭其资源。
参数:
| 名称 | 说明 |
|---|---|
shutdown |
是否调用 sink.shutdown()。 |
get_events¶
- API:
public - 首次版本:
unreleased
获取过滤后的事件副本。limit 保留最新 N 条并维持时间顺序。
参数:
| 名称 | 说明 |
|---|---|
limit |
最大返回数量;0 表示不限制。 |
filters |
可选过滤器。 |
返回:事件副本数组。
结构:
filters: Dictionary,可包含 channel_id、event_id、min_sequence、max_sequence 和 include_hidden_channels。return: Array[Dictionary],元素遵循 event_recorded 的事件 schema。
build_snapshot¶
- API:
public - 首次版本:
unreleased
构建适合诊断快照或支持报告分区的结构化轨迹。
参数:
| 名称 | 说明 |
|---|---|
options |
快照选项。 |
返回:有界轨迹快照。
结构:
options: Dictionary,可包含 limit、filters、include_context、include_channel_catalog 和 include_provider_catalog。return: Dictionary,包含 schema_version、summary、events,并按选项包含 context、channel_catalog 和 provider_catalog。
get_debug_snapshot¶
- API:
public - 首次版本:
unreleased
获取不含完整事件载荷的调试快照。
返回:当前容量、计数和 journal 状态。
结构:
return: Dictionary,包含 summary、channel_count、provider_count、max_events、max_event_buffer_bytes、max_event_bytes、max_journal_events、journal_configured 和 rejections_by_reason。