Rust in Everything
基于 tracing 0.1.44

在本站中

本站是开源的,仓库在 yuxuetr/rustineverything。这一部分的链接都指向提交 89a61b1(2026-10-23),行号以它为准。那个提交的 Cargo.lock 锁的是 tracing 0.1.44、tracing-core 0.1.36、tracing-attributes 0.1.31、tracing-subscriber 0.3.23、tracing-log 0.2.0,和本卷一致;dioxus 全家是 0.7.9。本站的服务端用 tracing 的方式很朴素:各 crate 里直接写 tracing::info! 之类的宏,三个函数挂了 #[instrument],main.rs 里有一段初始化 subscriber 的代码。这一部分逐一核对它们在生产里实际是什么样子。

  1. subscriber 的初始化:dioxus-server 0.7.9 的 serve_router 在调用本站回调之前就执行了 dioxus_logger::initialize_default(),本站的 try_init 总是返回 SetGlobalDefaultError。生效的过滤器是 from_env_lossy 加 hyper_util=warn,不装 LogTracer;两份配置在各种 RUST_LOG 下的差别,dx serve 和生产的格式差别,以及两种可能的改法。
  2. 本站的 #[instrument]:OAuth 回调、发评论、搜索三处的 skip、带表达式的 fields、err;cfg_attr 加 #[post] 时 span 包住的范围;搜索的 hits 先占位再 record,但成功路径没有事件,生产配置下从不出现。
  3. 日志行:133 处宏调用的字段写法统计和代表例子;一行真实的生产 WARN 怎样由 fmt 的 Full 格式和三层 Display 拼出来;RUST_LOG、docker json-file 轮转,以及日志里的 ANSI 颜色码。
flowchart TB
  serve["dioxus::serve"] --> logger["dioxus-logger 装 subscriber"]
  serve --> cb["本站回调"]
  cb --> tryinit["try_init 失败"]
  cb --> code["各模块代码"]
  code --> inst["三处 instrument"]
  code --> macros["133 处宏调用"]
  inst --> logger
  macros --> logger
  logger --> stdout["stdout"]
  stdout --> docker["docker json-file"]

💬 关联讨论

发起讨论
加载中...