zoupaper的个人博客分享 http://blog.sciencenet.cn/u/zoupaper

博文

工业系统中的日志

已有 3595 次阅读 2021-8-13 10:51 |系统分类:科研笔记

     本文所说的日志,是将程序运行过程中的细节写入文本,供事后分析使用,主要面向程序员或者运维人员。日志原则上不属于系统人机界面的一部分。跟告警系统的作用不一样,告警系统主要面向用户,而且是人机界面的重要组成部分。

      谈起日志,大家首要的印象,大概是属于程序的附属功能,似乎不那么重要。但是如果开发工业级的生产系统,这种思想一定需要扭转过来。日志的重要性几乎与程序功能代码不相上下。日志至少可以起到如下作用:

  1. 出现bug时,便于追查原因。很多工业系统部署的位置很远,或者部署于内网,不方便联网或者拨号处理。出现问题,哪怕是凌晨两点出现问题,也需要立刻解决。这时候乙方程序员往往立即订机票都来不及了,日志显然可以多一种处理问题的方法。另外,复杂故障,并不一定是重启进程后,就可以复现的。日志在许多情况下是追查问题的唯一手段。

  2. 可以分清责任。比如说某种电网控制系统,控制逻辑是用户提供的,但程序实现是乙方完成的。如果这种电网控制系统出现了意外行为,通过日志可以判定是逻辑的问题,还是具体实现的bug,有助于迅速定位问题,避免扯皮。

  3. 日志还可以有其它作用,特别是对于多线程并发编程,传统的调试工具、测试性能工具都会有局限性。很多时候需要依赖日志给出的信息。

    下面举几个日志在工程应用的例子。

    1. 阿里云的第一行代码

  4. 阿里云是优秀的国产基础软件,首倡者被评为院士。可以说,无论在工业界、还是在学术界,都得到了很高的认可。阿里云的第一行代码是什么样子呢?请看:

    阿里云代码.JPG

    可以看到,阿里云的第一行代码就是日志。当然,这并不能说明日志在阿里云中到底起到什么作用,毕竟我没有更多的资料,但这件事可以参考。

    2.   东方电子公司的备自投控制系统

        东方电子公司的备自投控制系统是通过电网的实时潮流,经过分析之后,远程控制备自投的投退压板。我考察过这一系统,对该系统的日志印象深刻。比如说,系统的日志是分门别类的,例如,备自投关心的遥信变化,专门是一个日志;备自投执行周期的相关设备遥测,是一个日志;备自投内部的逻辑判断,也是一个日志;坏数据或可疑数据,也有专门的日志。出现任何现象,都可以由日志追踪原因。

    3. 我开发的状态估计运行日志

       这是我以前在国网华北分部开发的功能,之前状态估计,出现合格率低、不收敛等异常情况,都转瞬即逝了,很难事后分析。因此开发日志系统,记录历史信息,可以起到一个很好的调试工具的作用。论文记载了一个实际案例:某天夜里,华北电网状态估计出现连续发散,当时是星期天, 自动化维护人员未上班。若只靠状态估计功能,由于历史信息已经丢失,很难查出发散原因。通过日志分析,分析出当时内蒙古电网的通信链路中断,许多量测不变化,导致状态估计发散。

       对于一个多线程的复杂程序,应该怎么设计日志系统?下面给出一些建议:

    1. 首先,日志应该是高性能的,至少不能影响业务系统的实时性。因此,日志写入硬盘的过程,应该单独由独立的线程完成。日志库是非阻塞的。

    2. 无论程序是不是并发,日志线程本身是串行的。这里对线程间的锁要有所设计。

    3. 程序core dump时,要尽量不丢失日志信息。我的经验是部分日志会缓存入mmap地址映射的内存区域,这部分信息会同步到硬盘二进制文件。‘

    下面是我画的日志线程与工作线程的关系,可以参考。

    日志线程.JPG

    下面推荐几个C++日志库。

    1. 陈硕的muduo中的日志库,这个日志库是我目前在用的,当然有定制需求,直接在代码上修改。这个日志库的优点是短小精炼,不会有冗余的功能。

    2. spdlog,据说是非常优秀的日志库,只需要头文件就可以使用,没有其它依赖。这个库使用了现代C++的特性,例如C++20 的 format 风格。

    3. boost库中也有相应的日志库。




https://blog.sciencenet.cn/blog-3316223-1299561.html

上一篇:现代C++的定位、设计原则与编程范式
下一篇:复杂系统与简单界面
收藏 IP: 112.2.80.*| 热度|

1 杨正瓴

该博文允许注册用户评论 请点击登录 评论 (2 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-22 01:24

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部