跳转至

日志

p4net 使用标准库 logging 模块,根 logger 为 p4net。每个内部 模块按自己的点分路径打日志——p4net.network.orchestratorp4net.runtime.bmv2p4net.compiler.p4c 等等——使用方可以独立 过滤或转发任何子系统。

命名空间

p4net.* logger 命名空间是稳定的:1.x 内不会改名。具体含义:

  • logging.getLogger("p4net.network").setLevel(logging.DEBUG) 在 1.0 能用,并且在所有 1.x 发布中都将继续可用。
  • 可能会新增子模块名(如 p4net.network.cleanup),但已有名字 不会在没有大版本升级的情况下被改名或删除。

级别

级别 你会看到什么
ERROR 库无法处理的失败。通常伴随抛出异常。
WARNING 意外但已处理。库自己恢复或绕过了某个状况。
INFO 生命周期事件:Network.start / stop、BMv2 拉起、gRPC 连接、主控权获取。
DEBUG 详细决策:编译器缓存命中/未命中、重试、election ID、底层 netlink 调用。

某个事件应该走哪个级别不属于稳定契约——如果某个 INFO 在实际 使用中太吵,我们可能会降到 DEBUG,反之亦然。级别分类法本身 是稳定的,事件具体走哪个级别不是。

日志文本本身不稳定。不要去 grep 生产日志里的特定字符串;用 级别与 logger 名筛选。

CLI 详细度

p4net 命令行接受:

  • 不带参 → 默认 WARNING(只显示问题)
  • -v / --verboseINFO
  • -vvDEBUG

更高的(-vvv……)也都解析为 DEBUG;没有比默认 WARNING 更 安静的级别。

代码内配置

在自己的脚本里,请在导入或实例化 p4net 组件之前先配好 logging ——basicConfig 只会对第一次调用生效:

import logging

logging.basicConfig(level=logging.INFO)

# 可选:让某一个子系统跑到 DEBUG,其它保持 INFO。
logging.getLogger("p4net.runtime").setLevel(logging.DEBUG)

更复杂的配置(文件 handler、JSON 格式化器、转发到 syslog) 请用 logging.config.dictConfig,与处理其它库一致。