[TOC]
参考python logging模块和UVM的uvm_info, 实现了分级打印log,log着色,控制log输出verbosity等级功能
- 打印log当前时间点、所在文件、行号和所在模块
- 分级打印log,默认支持5个等级,
DEBUG(10) < INFO(20) < WARN(30) < ERROR(40) < FATAL(50) - 支持自定义等级
- 支持静态、动态配置verbosity等级
- 支持配置不同等级、不同字段的样式
- 提供task打印汇总信息
- 提供task打印足够明确的pass/fail字符
构造函数, 用作初始化Logging类 参数:
- level: 类初始化时修改verbosity, 可选,默认值为info级
提供对应的宏,方便使用
典型用法:
Logging log=new(lvl);
// 或
`log_init(Logging::DEBUG);
`log_init();用作打印log信息,包括分级打印、着色和统计功能,并可以接受命令行参数(+l或+log)控制verbosity
参数:
- name: log级别的名称,默认支持debug,info,warn,error,fatal
- msg: 需要打印的信息,可以使用函数
$sformatf() - hier: log信息所在层级
- file: log信息所在文件
- line: log信息所在行号
提供对应的宏,方便使用
典型用法:
log.display("info", msg, $sformatf("%m"), `__FILE__, `__LINE__);用作设置指定级别(level)、字段(section)、状态(status)的样式
参数:
- key: level_t, section_t, status_t类型, 指定要设置的目标
- attr: attr_t类型, 指定属性
- fg: color_t类型,前景色
- bg: color_t类型,后景色
典型用法:
log.setup_style(Logging:TIME, Logging:DIM, Logging:WHITE, Logging:DEFAULT);用作设置verbosity
参数:
- level: level_t类型, 指定要级别
典型用法:
log.setup_verbosity(Logging::DEBUG);用于设置指定字段是否显示
参数:
- sec: section_t类型, 指定字段
- flag: flag_t类型, 显示或不显示
典型用法:
log.setup_section(Logging::LINE, Logging::ENABLE);用于设置指定级别的计数器值
参数:
- level: level_t类型, 指定级别
- value: integer类型,计数值
典型用法:
log.setup_counter(Logging::INFO,0);用于设置指定级别是否输出到文件
参数:
- level: level_t类型, 指定级别
- flag: flag_t类型, 输出或不输出
- logformat: string类型, log文件格式,默认为
./log_${NAME}.log
典型用法:
log.setup_filehandle(Logging::INFO, Logging::ENABLE);用于设置/新建级别相关配置
参数:
- name: string类型, 级别名称
- short: string类型, 级别名称(缩写)
- level: level_t类型, 指定级别, 自定义level时,建议取值范围在10-50之间
- attr: attr_t类型, 指定属性
- fg: color_t类型,前景色
- bg: color_t类型,后景色
典型用法:
log.setup_level("verbose", "v", VERBOSE, Logging::BRIGHT, Logging::CYAN, Logging::DEFAULT);用于在仿真结束时打印统计信息
无参数
典型用法:
log.setup_level("verbose", "v", VERBOSE, Logging::BRIGHT, Logging::CYAN, Logging::DEFAULT);用于在仿真结束时打印足够明确的pass/fail标志
参数:
- status: status_t类型,仿真状态,目前支持pass/fail/timeout,其他输入值一律打印为unknown
典型用法:
log.result(Logging::PASS);用于在仿真结束时清理文件句柄,清零计数器等 如果使用输出到文件功能,可以不调用它 提供一个对应的宏,方便使用, 注意该宏是无参数的
典型用法:
log.teardown();
// 或
`log_teardown;用于最终输出格式化后字符
参数:
- msgs: string数组,待输出字符串列表
- sytle: style_t类型,指定输出样式
- fh: integer类型,输出文件句柄
用于对指定字符串根据其所在级别或所在字段进行着色
参数:
- name:string类型,所在级别
- sec:section_t类型, 所在字段
- line: string类型,待输出字符串
等价于 Logging log=new(lvl);
等价于
log.display("debug", msg, $sformatf("%m"), `__FILE__, `__LINE__);同上
等价于log.teardown();
-
将logging.sv添加到filelist中
-
在需要使用logging之前,加入
`log_init();- 根据需要选择不同级别的log宏
`log_debug();
`log_info();
`log_warn();
`log_error();
`log_fatal();- 在仿真结束前,根据需要调用以下task
log.summary();
log.result(Logging::PASS);
log.result(Logging::FAIL);- 如果使用
set_filehandle打开了输出到文件功能,在仿真结束之前最好调用一次teardown
`log_teardown();- 在log文件中查看
由于ANSI escape字符在文件中会按字面值显示,失去着色效果,建议使用vim打开log文件
同时vim需要安装插件AnsiEsc
vim打开文件后,执行命令:AnsiEsc即可隐藏Ansi escape字符,同时恢复着色效果


