
Hat
译者
⚠️ 注意
如果您发现了错误,欢迎 参与贡献。
日志模块提供一组简洁的函数用于将消息写入系统日志和调试输出。
消息类别定义在 lib/birdlib.h 中:
| 级别 | 常量 | 用途 |
|---|---|---|
| Debug | L_DEBUG | 详细的调试信息 |
| Info | L_INFO | 一般信息(路由变更、邻居状态等) |
| Warning | L_WARN | 警告(配置问题、非关键错误) |
| Error | L_ERR | 错误(协议故障、连接失败) |
| Fatal Bug | L_BUG | 内部一致性错误(应触发断言) |
代码调用 log(L_INFO, "message")
│
▼
日志消息格式化和参数替换
│
▼
写入内部日志缓冲区 (buffer)
│
▼
log_commit(L_INFO, buf)
│
├── 写入系统日志 (syslog)
├── 写入日志文件 (如配置)
└── 输出到调试终端 (如 -d 启动)
│
▼
缓冲区清空,等待下一条消息💡 译者注
BIRD 的日志系统采用"先缓冲后提交"的设计,这在路由协议的异步环境中非常重要。日志缓冲允许在复杂的嵌套函数调用中逐步构造日志消息(如追加路由属性信息),最后通过 log_commit() 一次性原子提交。这避免了多线程/异步环境中日志行交错的问题。
| 函数 | 说明 |
|---|---|
log_commit(class, buf) | 将日志缓冲区写入日志,写入后清空缓冲区 |
log_msg(msg, ...) | 格式化并写入一条日志消息 |
log(loclass, msg, ...) | 传统接口,消息级别由首字符表示 |

译者
原文作者: <Ondrej Filip>, <Martin Mares>, <Maria Matejka>, <Ondrej Zajicek> 原文链接: https://bird.network.cz/?get_doc&v=20&f=prog-6.html#ss6.2 原文标题: 6.2 Logging
遵循协议: CC BY-NC-SA 4.0 / 译者: hat / 翻译时间: 2026-05-01 / 本文链接: https://bird.xmsl.dev/docs/developer-guide/6-2-logging.html