用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/r3bl-org/r3bl-open-core --skill write-structured-tracing命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Use a sub-agent (like `generalist`) to perform repetitive code transformations across multiple files in a single turn.
Apply type-safe bounds checking patterns using VPIndex/VPLength types instead of usize. Use when working with arrays, buffers, cursors, viewports, or any code that handles indices and lengths.
Run comprehensive Rust code quality checks including compilation, linting, documentation, and tests. Use after completing code changes and before creating commits.
基于 SOC 职业分类
正在显示 SKILL.md
| name | write-structured-tracing |
| description | Standard for writing structured tracing logs behind debug flags. |
This skill documents the project's standard for writing tracing logs (tracing::info!, tracing::debug!, etc.). It ensures logs are easily filterable, consistently formatted, and don't affect performance when disabled.
All tracing::*! calls must be gated behind a specific debug flag from tui/src/tui/mod.rs (or similar location) using the .then(|| { ... }) pattern. This ensures the tracing macro and any string allocations are completely bypassed when the flag is disabled.
Choosing the right flag (Scope Specificity): Make sure the flag you use is specifically scoped to the module or subsystem you are debugging. This scope can be narrow or broad depending on the requirements.
DEBUG_TUI_PTY_MUX) for a microscopic, high-volume subsystem (like a byte-stream parser). Doing so would spam the orchestrator logs.DEBUG_TUI_VT100_PARSER) to ensure developers can isolate and filter logs effectively without overwhelming the IO overhead.crate::DEBUG_TUI_MOD.then(|| {
// ... tracing call ...
});
// % is Display, ? is Debug. CommentYou MUST add the exact line comment // % is Display, ? is Debug. directly above every tracing::*! invocation. This serves as a quick syntax reminder.
messageDo not use unstructured string formatting (e.g., tracing::info!("Hello {}", name)). Instead, use structured fields with an explicit message key that identifies the context (e.g., the struct and method name).
crate::DEBUG_TUI_MOD.then(|| {
// % is Display, ? is Debug.
tracing::info! {
message = "ComponentName::method_name",
status = "Something happened",
};
});
inline_string! vs format! for Complex FormattingWhen you need to format complex strings within a tracing field, bind it to a field using the % (Display) modifier and follow this rule:
inline_string! macro to stack-allocate it.format! macro (since inline_string! would spill to the heap and allocate anyway).crate::DEBUG_TUI_MOD.then(|| {
// % is Display, ? is Debug.
tracing::info! {
message = "AppNoLayout::handle_event",
input_event = %inline_string!(
"{a} {b:?}",
a = glyphs::USER_INPUT_GLYPH,
b = input_event
)
};
});
Bad (Unstructured and Un-gated):
tracing::debug!("Received input event: {:?}", input_event);
Good (Structured and Gated):
crate::DEBUG_TUI_PTY_MUX.then(|| {
// % is Display, ? is Debug.
tracing::debug! {
message = "PTYMux::run_event_loop",
input_event = %format!("{:?}", input_event)
};
});