QNX 系统日志设计
原文地址::http://blog.csdn.net/wb5916/article/details/18136911
1 引言
1.1文档内容
QNX系统日志进行统一管理。具体包括:约定日志的级别,日志导出方式,日志的保存目录,日志的输出格式。
1.2适用平台
软件环境:QNX CAR2
1.3 述语
述语 |
描述 |
2 总体设计
通过系统动态库,提供一系统的日志函数,所有模块调用此日志API输出模块的日志。
日志库支持日志的动态管理,日志空间存储循环利用。
2.1日志打印级别
1.模块在日志输出时,支持四种打印级别:错误,警告,通知,调试。
2.系统通过全局环境变量QNX_LOG_OUTPUT_LEVEL来指定所有模块的日志输出等级。在研发时,我们指定的输出等级为:调试。(即调试及以上级别的日志将输出和保存),在量产后,我们指定的输出等级为:错误。(即我们将不保存错误以下的日志)。
3.模块在输出日志时指定输出的级别。
4.定义
typedef enum
{
LOG_ERR = 0,/* 错误 */
LOG_WAR, /* 警告 */
LOG_NOT, /* 通知 */
LOG_DBG, /* 只是调试用的日志 */
LOG_LAST,
}LOG_LEV_EN;
2.2日志存储管理
1.系统的所有日志都将存储在flash数据分区中,日志的存储路径为flash挂载目录下的log目录中。日志保存目录由环境变量QNX_LOG_OUTPUT_PATH指定。
2.模块在初始化时,指定日志的前缀,前缀必须唯一,我们将在log目录下对每个模块分别创建一个目录(前缀名称),分开保存模块的日志文件。
3.默认我们为每个模块分配10个日志文件,每个文件的最大字节为1M。模块的日志在以文件为单位,在这10个文件中循环存储,文件达到最大个数时,覆盖最老的文件。可选功能为模块可以在日志初始化函数中重新选定日志文件的个数和单个日志文件的最大字节。
4.日志文件的命名规则:假定前缀为称为:AAAA,则日志文件命名从1到10分别为,AAAA_01.log AAAA_02.log AAAA …………. AAAA_10.log
其中索引文件:BB.writing 文件名中的BB表示当前正在写入的文件索引号。
2.3日志输出方向
1.系统的所有日志支持输出到控制台(stdout)和输出到文件(flash)中。通过系统的环境变量QNX_LOG_OUTPUT_DIRECT来指定,模块启动时设定,默认为输出到flash。
2.此项功能只在模块调试开发时使用,比如模块在调试时需要从控制台来查看实时的日志输出,就可以修改此环境变量来切换输出。
2.4日志输出格式
1.系统日志输出格式支持两种:基本格式和扩展格式,通过环境变量QNX_LOG_OUTPUT_FORMAT来指定,一般在研发时指定为扩展格式,量产后指定为基本格式,默认为基本格式。
扩展格式:[级别]-[时间]-[函数名]-[文件名]-[行号]-[内容]
基本格式:[级别]-[时间]-[内容]
举例:
[DBG]-[08/2519:15:42][FuncGetKeyInd][mcumanager.c][814]-[xxxxxxxxxxxxxxxxxxxxx]
[NOT]-[08/2519:15:42] -[xxxxxxxxxxxxxxxxxxxxx]
3 接口设计
3.1全局环境变量
日志保存目录,日志输出方向,日志输出格式,日志打印级别。
Export QNX_LOG_OUTPUT_PATH=/opt/datas/log
Export QNX_LOG_OUTPUT_DIRECT=[flash/stdout]
Export QNX_LOG_OUTPUT_FORMAT=[normal/extra]
Export QNX_LOG_OUTPUT_LEVEL=[ERR/WAR/NOT/DBG]
默认为:输出到FLASH,打印基本格式,打印级别为:ERR。
3.2日志动态库函数
日志库主要提供3个API函数,模块在启动流程:
Main()
{
//日志初始化函数 (设置日志前缀,日志打印级别,日志输出方向,日志文件个数,日志文件大小)
//运行输出日志函数 (打印级别,内容字符串)
………………………
//日志释放函数。(释放和回写相关日志)
}
函数 |
功能描述 |
LogInit |
设置日志前缀,日志打印级别,日志输出方向,日志文件个数,日志文件大小。其中日志前经为必选,其它为可选(取环境变量值)。 |
LogOut |
输出日志函数,参数为:打印级别,日志字符串 |
LogRelease |
日志释放函数,参数无,功能为:释放写文件句柄,文件读写锁,释放分配内存,回写磁盘等收尾工作。 |
int LogInit(char *pcFilePath, char *pcFilePrefix,
int iLevel=0,int iDirect=0, int iMaxFileSize=0, int iMaxFileCount=0);
void LogOut (int iLevel, const char * fmt, ...);
void LogRelease();
4 日志导出管理
在界面上提供日志导出按扭,在点击时,将系统日志目录/flash/log拷贝到USB或SD存储卡的根目录下面。重命令为:log_XXXXX 其中XXXXX为系统当前时间。
5 健壮性处理
5.1多线程并发写处理
同一进程中可能存在多个线程,当多个线程并发写同一日志时,需要进行线程锁控制,解决资源冲突。也就是说LogOut必须是线程安全的。
pthread_mutex_lock函数使用。
5.2 进程安全性
LogInit/ LogRelease必须是进程安全的,不存在进程资源冲突问题。
5.3 频繁写问题
日志采取文件流进行读写(FILE*),利用流的机制来保证回写flash的频率。
QNX 系统日志设计相关推荐
- [i.MX6Q][QNX Neutrino 6.6.0]调试笔记------初识QNX_Neutrino
由于公司发展需要,所以本人从Android开始转向QNX学习,这也是个不可多得学习机会,据说QNX的系统以及服务是需要重金购买的,我拿到< QNX Development License Cer ...
- 基于AIOT技术的智慧校园空调集中管控系统设计与实现
毕业论文(设计) 题 目 基于AIOT技术的智慧校园空调集中管控系统设计与实现 指导老师 XXXX 专业班级 电子商务2XXXX 姓 名 XXXX 学 号 20XXXXXXXXX 20XX年XX月XX ...
- 计算机管理系统日志 mei,计算机软件毕业设计-教育局oa系统-公文管理的设计与实现.doc...
计算机软件毕业设计-教育局oa系统-公文管理的设计与实现.doc 河北农业大学信息学院 本科毕业论文 题 目:Abstract English Office Automation, Office Au ...
- qnx 镜像文件_一种基于Hypervisor的QNX操作系统启动方法及装置与流程
本发明涉及计算机领域,尤其涉及一种基于Hypervisor的QNX操作系统启动方法及装置. 背景技术: 基于Hypervisor的QNX是一种商用的遵从POSIX规范,常用用在汽车及路由器上,QNX是 ...
- 自动驾驶QNX,Linux,Autosar概述
自动驾驶QNX,Linux,Autosar概述 QNX是一个分布式.嵌入式.可规模扩展的实时操作系统.遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具).部分遵循POSIX.1b( ...
- 美团即时物流的分布式系统架构设计
背景 美团外卖已经发展了五年,即时物流探索也经历了3年多的时间,业务从零孵化到初具规模,在整个过程中积累了一些分布式高并发系统的建设经验.最主要的收获包括两点: 即时物流业务对故障和高延迟的容忍度极低 ...
- 美团外卖分布式系统架构设计
背景 美团外卖已经发展了五年,即时物流探索也经历了3年多的时间,业务从零孵化到初具规模,在整个过程中积累了一些分布式高并发系统的建设经验.最主要的收获包括两点: 即时物流业务对故障和高延迟的容忍度极低 ...
- 调研字节码插桩技术,用于系统监控设计和实现
作者:小傅哥 博客:https://bugstack.cn ❝ 沉淀.分享.成长,让自己和他人都能有所收获!???? ❞ 目录 一.来自深夜的电话! 二.准备工作 三.使用 AOP 做个切面监控 1. ...
- HACMP 认证学习系列,第 2 部分-1:计划与设计
网络安全规划 规划网络安全性对于避免集群节点上未经授权的访问也是非常重要的. 从 HACMP V5.1 开始,通过为节点之间所有与 HACMP 配置相关的通信提供公共通信基础设施(守护进程),从而引入 ...
- Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点
Vxworks.QNX.Xenomai.Intime.Sylixos.Ucos等实时操作系统的性能特点 VxWorks操作系统 VxWorks 操作系统是美国WindRiver公司于1983年设计开发 ...
最新文章
- 死磕Java多线程(五)---理解CPU高速缓存的工作原理 《JAVA性能优化权威指南》 提到过CPU高速缓存未命中率影响线程切换频率
- Oracle按照时间统计总结
- python 函数装饰器学习
- R语言的一个加法函数
- easyui combobox java_Easyui的combobox实现动态数据级联效果
- Node项目实战开发-博客系统
- mysql 列很多_MySQL:多个表还是一个表有很多列?
- mysql 建表报错_mysql innodb 引擎 ,建表时报错:ERROR 1118 (42000)
- 从程序员到项目经理(2)
- Java时间 之 Instant
- 那时候写计算机毕业论文,必用神器!
- 做流程图软件有哪些?来看看今天的分享
- 清华大学霸榜计算机学科第一!2022 USNews世界大学排名出炉!
- 投CVPR过程中惊险的Rebuttal环节
- C++无名命名空间中定义的函数不使用造成“-Wunused-function”警告问题
- Android 飞机大战 一
- python打开已有docx文档_python读取docx文件,就是如此简单
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java影视创作论坛系统13b52
- 小米手机拍照一般?那是那没打开着几个功能,效果堪比单反
- 永宏PLC 寄存器之Modbus地址映射
热门文章
- Windows Server 2012 R2 官方原版镜像(转载)
- 人工智能教程1---科普人工智能
- 第八届ACM程序设计大赛总结
- HTML 与 microsoftOffice word中字体对照表
- JavaScript弹窗
- 产品需求分析流程图怎么做?软件我都帮你找了
- 如何用css设置文字加粗,css如何设置文字加粗
- 音频编解码算法库 (可支持g711u,g711a,g729,g722,opus等)
- 安卓10不支持qmc解码_百度云不限速下载,超级简单!亲测可用,IOS/安卓/电脑全支持...
- 网络计划的自由时间和松弛时间free and slack