课题7:编译器日志增强器
难度:低
概述:为编译器的各个阶段(解析、IR生成、优化、代码生成)添加分级、带颜色的日志输出,支持--log-level和--log-file命令行参数。
详细任务:
1. 使用Python logging模块,创建多个logger(按模块)。
2. 添加argparse参数:--log-level {DEBUG,INFO,WARN,ERROR},--log-file FILE。
3. 替换现有print语句为logger.info或logger.debug。
4. 为关键操作添加日志:开始解析、优化Pass应用、指令数统计、代码生成完成。
5. 实现彩色输出(使用colorlog或ANSI码),不同级别不同颜色。
6. 支持同时输出到控制台和文件(文件可保留DEBUG级别)。
7. 确保高日志级别时低级别字符串不会被构造(使用logger.isEnabledFor)。
交付产物:
- 修改后的编译器主文件和各个模块
- 使用示例:python main.py test.dsl --log-level DEBUG --log-file build.log
- 文档:日志级别含义、如何为新增模块添加日志
12周每周目标:
- W1:学习logging模块基础(Logger、Handler、Formatter、级别)。编写demo。
- W2:分析编译器现有print语句,规划哪些应转为日志,划分级别。
- W3:在main.py中初始化logging,添加控制台Handler,设置格式%(asctime)s - %(name)s - %(levelname)s - %(message)s。
- W4:替换前端(解析)中的print为logger.info/debug,添加--log-level参数。
- W5:替换IR生成和优化阶段的print,为每个阶段创建子logger(如logger = logging.getLogger('ir'))。
- W6:替换后端代码生成的print,确保所有输出通过日志。
- W7:安装colorlog,根据级别设置颜色(ERROR红色,WARNING黄色,INFO绿色,DEBUG灰色)。
- W8:添加--log-file参数,将日志同时写入文件。
- W9:优化日志信息,避免噪音,关键步骤输出简洁的统计信息。
- W10:测试不同级别和参数组合,确保性能影响小(使用if logger.isEnabledFor)。
- W11:添加进度指示(如“Parsing... Done in 0.02s”)。
- W12:撰写文档:日志级别说明、配置方法、常见使用场景。