串口能看到启动信息,业务运行后却没有日志,可以从组件、输出目标和消息积压查起。本文围绕“VxWorks如何配置系统日志输出VxWorks运行日志缺失如何排查”,以VxWorks 6.x、Workbench英文界面的内核logLib为例说明。RTP的标准输出和应用自建日志,需要按各自机制检查。
一、VxWorks如何配置系统日志输出
logMsg()先把消息交给队列,再由日志任务格式化并输出。配置时要同时确认组件、输出目标和接口用法。
1、把日志组件加入系统镜像
打开实际用于目标板启动的镜像工程,添加内核日志组件。
①在【Project Navigator】展开VxWorks Image工程,双击【Kernel Configuration】。
②切换到【Components】,找到INCLUDE_LOGGING,加入组件并处理依赖。
③查看日志队列容量参数,记录当前设置;常见配置项为MAX_LOG_MSGS,以工程显示为准。
④保存配置,重新构建镜像并启动目标板,核对本次加载的是新镜像。
2、确认控制台或文件输出目标
logFdSet()设置主要输出描述符,logFdAdd()增加输出目标。Shell中能打印文字,并不能证明日志任务也写向同一终端。
①在启动配置中检查日志初始化使用的控制台描述符,确认对应设备已经打开。
②需要切换主要输出时,调用logFdSet(),传入有效的输出描述符。
③需要同时写文件时,先打开目标文件,再调用logFdAdd(),检查添加结果。
④停止文件输出时,先用logFdDelete()移除追加的描述符,确认不再有相关写入后再关闭文件。
3、发送一条容易辨认的测试消息
先用固定文字测试。系统已初始化日志库时,不要在应用中重复调用logInit()。
①在普通任务中调用logMsg(),使用固定格式串,并在末尾加入换行符。
②按当前logLib.h的声明传入参数;经典接口需要六个参数位置,未使用的位置填零。
③检查接口返回值和目标端实际输出,给测试消息加入独立编号,避免与其他任务的日志混淆。
二、VxWorks运行日志缺失如何排查
先判断是全部没有、偶尔缺行,还是重启前丢失。
1、完全没有输出,先看日志任务
日志任务通常名为tLogTask。等待消息时显示PEND可以是正常现象,应继续查看等待位置。
①在内核Shell执行i,查看tLogTask是否存在;需要镜像包含相应的任务查看支持。
②任务存在时,执行ti并指定其任务标识,检查状态及等待位置。
③发现任务异常挂起时,保留异常信息和调用栈,检查无效指针、栈空间或输出设备问题。
④任务不存在时,回查组件和启动初始化结果,不直接手工创建同名任务替代日志初始化。
2、终端有输出,日志却不在这里
printf()和logMsg()可能使用不同的输出路径。切换远程Shell或重定向某个任务的标准输出,不代表系统日志目标随之变化。
①在普通任务中分别发送一条直接输出和一条logMsg()消息,记录各自出现的位置。
②检查启动代码及运行代码中的logFdSet()、logFdAdd()调用,确认是否切到了其他设备或文件。
③检查描述符是否已经关闭、设备是否断开;文件输出同时检查挂载状态、可写权限和剩余空间。
3、压力上来后缺行,检查处理速度
日志产生速度持续高于输出速度,扩大队列也只能缓解短时积压。慢速串口或文件写入还可能拖住日志任务。
①降低日志频率,用连续编号记录消息,比较低负载与高负载下的缺失情况。
②检查日志调用失败记录、丢失提示及日志任务的调度情况,不只统计终端收到多少行。
③暂停不必要的追加输出目标,比较是否由某个慢设备拖慢整体输出。
④确认存在短时突发后,再适当增加队列容量,重新构建镜像;同时将高频重复日志改为定期汇总。
4、内容乱码或偶发消失,检查字符串地址
logMsg()延后处理格式串和参数,不会自动复制所有指针指向的内容。局部数组已经失效、共享缓冲区被改写,都可能造成异常。
①检查格式串和%s参数,避免传入即将离开作用域的栈内字符串。
②保证相关存储在日志处理完成前有效且不被改写;动态内容需要复制时,改用有明确缓冲区管理的采集方案。
③核对格式符与参数宽度,尤其是指针和64位数值,不照搬旧版的int强制转换。
三、VxWorks日志怎样保留到故障发生之后
消息进入队列后,还需要完成输出和保存,才能供故障复查。
1、保留启动和重启前的记录
日志任务尚未运行的早期阶段,不能依赖普通logMsg()完成输出。重启也可能使队列中尚未处理的消息消失。
①在主机终端开启会话记录,再重启目标板,保存完整启动过程。
②早期启动问题使用BSP支持的早期输出接口,确认适用阶段后再加入诊断信息。
③正常退出前停止新增日志,安排应用层排空及文件同步流程;固定延时不能作为日志已经保存的证明。
2、确认日志文件能够长期保存
写入RAM盘的文件通常不能跨重启保留,持续追加也可能耗尽存储空间。
①核对日志所在文件系统,重启后检查测试记录是否仍然存在。
②按存储容量安排轮换和保留数量,记录文件打开、写入及切换失败情况。
③在接近容量上限时测试,确认日志管理不会明显影响业务任务运行。
总结
希望“VxWorks如何配置系统日志输出VxWorks运行日志缺失如何排查”这篇文章能帮到大家。嵌入式产品投入使用后,开发人员往往无法一直守在设备旁边,能够了解现场情况,对维护和协作都有帮助。工程经验也常常来自这些日常细节:一次问题留下的资料,可能让下一次处理少走不少弯路。愿大家在项目中逐渐积累自己的经验,让开发、交付和后续维护衔接得更顺畅,也为产品的长期使用多一份把握。如果有VxWorks相关需求,欢迎联系我们进一步沟通。
