第十四章:应用构建模块-logging:报告状态、错误和信息消息-日志树

本文深入探讨了日志系统的树状结构配置原理,解释了如何通过树形结构实现灵活的日志记录器配置,包括不同级别的处理器分配、消息传递机制及格式化器设置,使开发者能够精确控制日志信息的记录位置和详细程度。

14.8.7 日志树
Logger实例采用一种树结构配置(根据它们的名字),如图14-1所示。通常每个应用或库都会定义一个基名,各个模块的日志记录器被设置为子节点。根日志记录器没有名字。
在这里插入图片描述
树结构对于配置日志记录很有用,因为这样各个日志记录器就不需要有自己的一组处理器。如果一个日志记录器没有任何处理器,那么消息会传给它的父日志记录器来处理。因此,对于大多数应用,只需要在根日志记录器上配置处理器,所有日志信息都将被收集和发送到相同的地方。如图14-2所示。
在这里插入图片描述
树结构还允许为应用或库的不同部分设置不同的详细级别、处理器和格式化器。这种灵活性使得程序员能控制要记录哪些消息,以及要把它们记录到哪里,如图14-3所示。
在这里插入图片描述

在这个脚本基础上优化 @echo off setlocal enabledelayedexpansion :: ---------------------------- :: 基础配置(可修改区域) :: ---------------------------- set "UV=F:\Software\keil5\core\UV4\UV4.exe" set "project_root=%~dp0Multi_project" :: 工程根目录 :: ---------------------------- :: 命令行参数处理 :: ---------------------------- if not "%~1"=="" ( set "TARGET_PROJECT=%~1" call :validate_project call :compile exit /b %errorlevel% ) :: ---------------------------- :: 自动检测所有子工程 :: ---------------------------- echo Scanning projects in: %project_root% set "project_count=0" for /d %%a in ("%project_root%\*") do ( set /a "project_count+=1" set "project_name=%%~nxa" set "project_list=!project_list! !project_name!" ) echo Found %project_count% project(s) :: ---------------------------- :: 主编译流程 :: ---------------------------- for %%a in (%project_list%) do ( set "TARGET_PROJECT=%%a" call :compile if errorlevel 1 ( echo [ERROR] Build failed for: %%a exit /b 1 ) ) exit /b 0 :: ---------------------------- :: 子程序:工程验证 :: ---------------------------- :validate_project if not exist "%project_root%\%TARGET_PROJECT%" ( echo [ERROR] Project not exist: %TARGET_PROJECT% exit /b 2 ) if not exist "%project_root%\%TARGET_PROJECT%\%TARGET_PROJECT%_MCU.uvmpw" ( echo [ERROR] Project file missing: %TARGET_PROJECT%_MCU.uvmpw exit /b 3 ) exit /b 0 :: ---------------------------- :: 子程序:编译流程 :: ---------------------------- :compile echo. echo [INFO] Building project: %TARGET_PROJECT% :: 路径配置(自动生成带时间戳的日志文件) set "build_log=%~dp0logs\%TARGET_PROJECT%_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%.log" set "uvproj_path=%project_root%\%TARGET_PROJECT%\%TARGET_PROJECT%_MCU.uvmpw" :: 清理并创建日志目录 if not exist "%~dp0logs\" md "%~dp0logs" break > "%build_log%" :: 执行编译命令 echo Project file: %uvproj_path% "%UV%" -j0 -r "%uvproj_path%" -o "%build_log%" :: ---------------------------- :: 错误检查 :: ---------------------------- if not exist "%build_log%" ( echo [ERROR] Log file missing: %build_log% exit /b 4 ) type "%build_log%" | findstr /i /r "\<Error\>" "\<error(s)\>" "\<错误\>" if %errorlevel% equ 0 ( echo [ERROR] Compilation failed: %TARGET_PROJECT% exit /b 1 ) echo [SUCCESS] Build completed: %TARGET_PROJECT% exit /b 0
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值