# 日志系统 **Repository Path**: zxh34/log-system ## Basic Information - **Project Name**: 日志系统 - **Description**: 移植EasyLogger日志系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-19 - **Last Updated**: 2026-06-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EasyLogger - STM32 日志系统 基于 STM32F103ZE 和 [EasyLogger](https://github.com/armink/EasyLogger) 的嵌入式日志系统示例项目。 ## 项目简介 本项目展示了如何在 STM32 平台上集成和使用 EasyLogger 日志库。EasyLogger 是一款超轻量级、高性能的嵌入式日志库,非常适合资源受限的 MCU 项目。 项目通过 USART1 串口输出日志,支持多级日志过滤、彩色输出、时间戳、RTC 时钟等功能。 ## 硬件平台 | 项目 | 参数 | |------|------| | **MCU** | STM32F103ZE | | **主频** | 72MHz(HSE + PLL) | | **调试串口** | USART1(PA9 TX / PA10 RX) | | **波特率** | 115200 | | **RTC 时钟源** | LSI(内部低速时钟) | ## 软件架构 ``` EasyLogger/ ├── Core/ # STM32 核心代码 │ ├── Inc/ # 头文件 │ │ ├── main.h # 主程序头文件 │ │ ├── gpio.h # GPIO 配置 │ │ ├── usart.h # 串口配置 │ │ └── stm32f1xx_it.h # 中断服务头文件 │ └── Src/ # 源文件 │ ├── main.c # 主程序 │ ├── gpio.c # GPIO 初始化 │ ├── usart.c # 串口初始化 + printf 重定向 │ └── stm32f1xx_it.c # 中断服务函数 ├── Drivers/ # STM32 HAL 驱动库 │ ├── CMSIS/ # CMSIS 核心 │ └── STM32F1xx_HAL_Driver/ # HAL 库 ├── Components/ # 组件库 │ └── easylogger/ # EasyLogger 日志库 v2.2.99 │ ├── inc/ # 核心头文件 │ │ ├── elog.h # API 接口 │ │ └── elog_cfg.h # 配置文件 │ ├── src/ # 核心源码 │ │ ├── elog.c # 日志核心实现 │ │ ├── elog_async.c # 异步输出 │ │ ├── elog_buf.c # 缓冲输出 │ │ └── elog_utils.c # 工具函数 │ └── plugins/ # 插件 │ ├── file/ # 文件日志插件 │ └── flash/ # Flash 日志插件 ├── MDK-ARM/ # Keil MDK 工程文件 │ └── EasyLogger/ # 工程配置 ├── EasyLogger.ioc # STM32CubeMX 配置文件 └── README.md ``` ## 日志功能 ### 日志等级 | 等级 | 宏定义 | 简写 | 说明 | |------|--------|------|------| | Assert | `ELOG_LVL_ASSERT` | `log_a()` | 断言日志 | | Error | `ELOG_LVL_ERROR` | `log_e()` | 错误日志 | | Warn | `ELOG_LVL_WARN` | `log_w()` | 警告日志 | | Info | `ELOG_LVL_INFO` | `log_i()` | 信息日志 | | Debug | `ELOG_LVL_DEBUG` | `log_d()` | 调试日志 | | Verbose | `ELOG_LVL_VERBOSE` | `log_v()` | 详细日志 | ### 日志格式 当前配置的日志输出包含以下字段: - **日志等级** — `A/E/W/I/D/V` - **标签** — 模块标识(如 `main`) - **时间戳** — RTC 时间 - **文件路径** — 源码文件位置 - **函数名** — 所在函数 - **行号** — 源码行号 ### 特性 - ✅ **彩色输出** — 不同等级日志以不同颜色显示 - ✅ **等级过滤** — 可动态设置输出等级 - ✅ **标签过滤** — 按模块标签过滤日志 - ✅ **关键字过滤** — 按关键字过滤日志 - ✅ **RTC 时间戳** — 精确到秒的时间记录 - ✅ **文件/Flash 插件** — 支持日志持久化存储(可选) - ✅ **异步输出** — 支持异步模式减少阻塞(可选) - ✅ **缓冲输出** — 支持缓冲模式批量输出(可选) ## 快速开始 ### 1. 环境要求 - **IDE**: Keil MDK-ARM 5.x - **硬件**: STM32F103ZE 开发板 - **调试器**: J-Link / ST-Link - **串口工具**: 任意串口调试助手(波特率 115200) ### 2. 编译与烧录 1. 使用 Keil MDK-ARM 打开 `MDK-ARM/EasyLogger/EasyLogger.uvprojx` 工程文件 2. 编译工程(Build) 3. 通过调试器烧录到开发板 ### 3. 查看日志 1. 使用串口线连接开发板的 USART1(PA9 TX / PA10 RX) 2. 打开串口调试助手,配置波特率 **115200**、8 数据位、1 停止位、无校验 3. 复位开发板,即可看到日志输出 预期输出类似: ``` [I] [main] [00:00:01] Hello EasyLogger! [E] [main] [00:00:01] Hello EasyLogger! [W] [main] [00:00:01] Hello EasyLogger! [I] [main] [00:00:01] Hello EasyLogger! [D] [main] [00:00:01] Hello EasyLogger! [V] [main] [00:00:01] Hello EasyLogger! ``` ### 4. 在代码中使用 ```c #define LOG_TAG "my_module" // 定义模块标签 #include "elog.h" // 初始化 elog_init(); elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME); elog_set_filter_lvl(ELOG_LVL_VERBOSE); elog_start(); // 输出日志 log_i("系统初始化完成"); log_d("变量值: x=%d, y=%d", x, y); log_e("发生错误: 错误码=%d", err_code); ``` ## 配置说明 EasyLogger 的核心配置位于 `Components/easylogger/inc/elog_cfg.h`: | 配置项 | 说明 | 默认值 | |--------|------|--------| | `ELOG_OUTPUT_ENABLE` | 启用日志输出 | 开启 | | `ELOG_OUTPUT_LVL` | 静态输出等级 | `ELOG_LVL_VERBOSE` | | `ELOG_LINE_BUF_SIZE` | 每行日志缓冲区大小 | 1024 | | `ELOG_COLOR_ENABLE` | 启用彩色输出 | 开启 | | `ELOG_ASYNC_OUTPUT_ENABLE` | 启用异步输出 | 关闭(可选) | | `ELOG_BUF_OUTPUT_ENABLE` | 启用缓冲输出 | 关闭(可选) | ## printf 重定向 项目已将 `printf` 重定向到 USART1,可直接使用标准库的 `printf` 函数输出到串口: ```c // usart.c 中的实现 int fputc(int ch, FILE *file) { HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 100); return ch; } ``` ## 致谢 - [EasyLogger](https://github.com/armink/EasyLogger) — 感谢 Armink 开源的优秀嵌入式日志库 - [STM32CubeMX](https://www.st.com/en/development-tools/stm32cubemx.html) — STM32 代码生成工具 ## 许可证 - EasyLogger 组件使用 MIT 许可证 - STM32 HAL 驱动库使用 ST 公司许可证 - 用户代码部分遵循 MIT 许可证