2019独角兽企业重金招聘Python工程师标准>>>

在做设备开发的时候,是否经常存在以下疑问:

1.在开发过程中,程序没有发生崩溃,但在压力测试过程中却发生了崩溃,抓狂崩溃发生在哪?

2.设备为何不按照设想的情景运行,当时的场景已经无法复现,抓狂该如何定位问题所在?

这时候,需要引入日志系统。

而在仪器设备行业,大多数情况,需要日志系统,主要存在两个需求:

1。用于追踪程序崩溃的大致位置

2。用于记录仪器运行过程中数据

(个人认为目前大型设备基本也只有这两个需求)

而仪器的日志特点是:

1。数据量不大,一天1~10个G就很多了

2。存在多个子系统,需要分系统记录

3。能够按日期滚动记录在文件中

4。功能(例如开关)可不断线实时加载

5。小型化,尽可能的小

为了满足上述需求和特点,开发了日志库,源码地址:GL4A_logger。

目的:

用于工业设备问题追踪和分析。

用于在运行和调试过程中,记录崩溃所在的大致位置。

用于在日常运行过程中,监控必要的数据。

特点:

记录时间小于1ms;

实时记录,可用于崩溃追踪;

缓冲记录,可用于记录日常运行数据;

记录文件名和行号,并支持格式化输出;

支持运行过程中实时重加载配置;

可记录在控制台中,自由选择功能开关;

可记录在文件中,自由选择功能开关;

可自由添加组件/模块,分模块记录,模块可自由开关;

可自由配置日志等级。

组成:

组件、日志记录器、等级

组件可由用户增删改,组件可自由开关,如果某个组件关闭,那么所有其挂载的日志记录器均不会对其进行日志记录。

日志记录器分为console控制台日志记录、rolling滚动型日志记录、daily按天日志记录。三种日志记录器均可以自由开关,如果某种日志记录器被关闭,那么所有此类型的日志均不会被记录。

等级分为trace和error,其中,error等级用于追踪崩溃,trace用于日常数据记录。所有error日志均会在trace中备份记录一份,主要用于保持trace数据上下文完整性。

所有配置项均存在config文件夹中的配置文件GL4A_config.cfg中。

结构图:

基本用法:

{

//引用头文件

#include "GL4A_user.h"

// 在程序入口处,根据配置文件路径,初始化日志库

eGL4A_init(GL4A_DEFAULT_CONFIG_DIR);

// 在M0组件函数入口处,记录ERROR,并标识为 IN(用于定位大致崩溃位置)

GL4A_ERROR_LOG("M0", __F__, __L__, "XXX函数,IN!\n");

// 在中间必要时,记录 TRACE,用于日常数据记录

GL4A_TRACE_LOG("M0", __F__, __L__, "记录数据!\n");

// 在M0组件函数入口处,记录ERROR,并标识为 OUT(用于定位大致崩溃位置)

GL4A_ERROR_LOG("M0", __F__, __L__, "XXX函数,OUT!\n");

// 在程序出口处,关闭日志库

GL4A_close();

}

注:当程序发生崩溃时,相应函数入口ERROR IN会被记录,但ERROR OUT不会被记录,那么,根据记录的文件名和行号,即可定位崩溃发生的位置。

在记录ERROR时,同时会在TRACE中备份记录一份,用于保持TRACE记录上下文的完整性。

基本函数

主要包括两个部分:

  1. 日志库初始化/关闭/重加载,日常输出

GL4A_init——用于初始化日志库

GL4A_reloadConfig——用于实时重加载日志配置文件

GL4A_close——用于关闭日志库

GL4A_TRACE_LOG——用于输出TRACE日志

GL4A_ERROR_LOG——用于输出ERROR日志

  1. 日志库配置文件修改

loadCfgFileToStruct——用于获取配置文件结构体

saveCfgFileFromStruct——用于将配置结构体保存到配置文件

genConfigDefault——重新按照默认的配置结构体生成配置文件

TotalCfgInfos——配置结构类,其中包含对配置项的基本操作

注:如果对json格式比较了解,可直接对配置文件进行操作

注:具体参见GL4A_user.h中GL4A命名空间,有非常详尽的注释

源码地址:GL4A_logger

转载于:https://my.oschina.net/u/3162997/blog/2992826

C++工业设备日志记录系统相关推荐

  1. 简单易用的开源用户操作日志记录系统

    我们开发的业务系统通常会提供给很多人使用,那在使用的过程中,日志系统变得非常重要. 日志系统记录的用户行为有以下的作用: 从系统用户角度看:它展示了用户自身的操作历史和具体对象的变动历史,便于用户进行 ...

  2. 【Windows日志】记录系统事件的日志

    文章目录 一.概要 二.Windows日志介绍 2.1 应用程序日志 2.2 系统日志 2.3 安全日志 三.查看与分析日志 四.常见事件ID 4.1 登录事件 4.1.1 4624登陆成功 4.1. ...

  3. c++实现的日志打印和记录系统

    这是一个c++实现的日志打印和记录系统,使用在我们的ai项目中,这是一个最小系统.目的时展现日志系统的最小系统.可以独立运行 运行环境 linux ubuntu github工程 c++ LogSys ...

  4. linux 日志主服务器 syslog

    syslog日志服务 syslog日志的主要用途是系统审计,监测追踪和分析统计,syslog是一个综合的日志记录系统,它主要的功能是方便日志管理和分类存放日志 日志syslog的功能: syslog功 ...

  5. Android10.0 日志系统分析(一)-logd、logcat 指令说明、分类和属性-[Android取经之路]

    摘要:本节主要来讲解Android10.0 日志系统的logd.logcat相关指令说明.日志分类和常用日志属性 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Andro ...

  6. Linux系统.xsesion日志文件,linux系统日志

    ##日志记录系统每天发生的各种各样的事情,比如监控系统的状况,排查系统的故障等.你可以通过日志来检查错误发生的原因,或者受到***时留下的痕迹.日志的主要功能是审计和监测,还有实时的监测系统状态,监测 ...

  7. db2关闭下一句sql的日志_MySQL 用户和权限管理,日志体系简介

    一.MySQL用户 1.基础描述 在数据库的使用过程中,用户作为访问数据库的鉴权因素,起到非常重要的作用,安装MySQL时会自动生成一个root用户,作为数据库管理员,拥有所有权限.在多用户的应用场景 ...

  8. node服务:日志、配置、路由与控制器

    文章目录 node服务:日志.配置.路由与控制器 日志框架winston 可配置性 路由 控制器 node服务:日志.配置.路由与控制器 日志框架winston 系统发布上线,出了bug?保存在文件中 ...

  9. python Logging日志记录模块详解

    写在篇前   logging是Python的一个标准库,其中定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统.Python logging 的配置由四个部分组成:Logger.Handl ...

  10. linux创建目录记录日志,创建LVM的日志记录

    先上一张鸟哥LVM的图.感觉这张最清楚了. #以下以Xshell的日志记录系统直接记录.上面添加了一些个人理解的注释 [BEGIN] 2016/9/13 9:22:24 #先查看下硬盘的情况. [ro ...

最新文章

  1. Matlab调用函数实现CIC滤波器
  2. VMware中安装CentOS Linux release 7.4.1708 (Core)
  3. Git log高级用法
  4. 学习笔记101— word 如何给某一页后面所有页增加行号
  5. 深圳6月23号活动《产品经理三分钟》报名开始啦!
  6. ISAPI_Rewrite规则
  7. CSharp中的数组和ArrayList及List
  8. mysql与django交互_django与mysql交互
  9. 使用c#对xml文件进行解析 功能演示 161483724
  10. Cisco Nexus-1000v授权
  11. linux 前端环境搭建
  12. html5长按 排序,H5 长按 拖拽排序的实现
  13. eclipse无法启动的各种解决方法
  14. 《数学之美》—图论和网络爬虫
  15. python运维主要学什么_python运维入门该学什么
  16. 视频教程-Matlab小白入门必备教程-Matlab
  17. mysql身份证号的类型_MySQL--隐藏手机号、身份证号三种方式
  18. HyperMesh 实用教程(一)组件
  19. 美团财报电话会:将专注于创造外卖和到店业务的协同效应
  20. 排列组合(Java随笔)—全排列

热门文章

  1. 循环神经网络之LSTM和GRU
  2. Android mainfests手记
  3. 2017《面向对象程序设计》课程作业五
  4. MyEclipse搭建安卓环境
  5. bfs-poj-Bloxorz I
  6. Web前端 HTTP1.0、 HTTP 1.1 、 HTTP2.0 区别与联系
  7. Python学习笔记(5)practice:shopping_cart
  8. APP的UI自动化测试框架及平台化探索
  9. 使用github参与到开源项目的维护
  10. jasoncpp读取jason数据如何判断某一字段是否存在