VxWorks中文网站 > 热门推荐 > VxWorks如何配置系统日志输出 VxWorks运行日志缺失如何排查
教程中心分类
VxWorks如何配置系统日志输出 VxWorks运行日志缺失如何排查
发布时间:2026/10/27 14:32:37

  串口能看到启动信息,业务运行后却没有日志,可以从组件、输出目标和消息积压查起。本文围绕“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相关需求,欢迎联系我们进一步沟通。

176 5129 0128