calculate_formatted_length

Function calculate_formatted_length 

Source
fn calculate_formatted_length(entry: &LogEntry) -> usize
Expand description

计算日志条目格式化后的精确字节长度

格式: “{color_code}{level} [{timestamp:12}] [CPU{cpu_id}/T{task_id:3}] {message}{reset}\n”

重要: 此函数的计算逻辑必须与以下格式化函数保持一致:

  • log_core::direct_print_entry - 控制台输出格式
  • log_core::format_log_entry - syslog 系统调用格式

如果修改了日志输出格式,需要同步更新三处:

  1. log_core::direct_print_entry - 实际格式化输出
  2. log_core::format_log_entry - 字符串格式化
  3. calculate_formatted_length (此函数) - 字节长度计算

§组成部分计算

  • ANSI 颜色代码: entry.level().color_code().len() (开始)
  • ANSI 重置代码: entry.level().reset_color_code().len() (结束)
  • 级别标签: entry.level().as_str().len() (例如 “\[INFO\]”)
  • 时间戳: 14 字节 (“ [“ + 12位数字 + “]”)
  • CPU ID: “ [CPU“ + digit_count(cpu_id)
  • 任务 ID: “/T” + digit_count_padded(task_id, 3) + “]”
  • 消息内容: entry.message().len()
  • 空格分隔: 3 字节 (level后1个, timestamp后1个, context后1个)
  • 换行: 1 字节