当前位置:首页 > 公众号精选 > 技术让梦想更伟大
[导读]、 引言 在日常代码测试或运行中,打印日志检测代码运行状态必不可少。先举三个例子: 在物联网系统中设备什么时候上线,可以将上线的信息写入数据库,也可以将该设备上线的记录打印到日志中,以该设备的id为文件名,查找日志也比较方便,上线时间、IP地址等




引言

在日常代码测试或运行中,打印日志检测代码运行状态必不可少。先举三个例子:

  1. 在物联网系统中设备什么时候上线,可以将上线的信息写入数据库,也可以将该设备上线的记录打印到日志中,以该设备的id为文件名,查找日志也比较方便,上线时间、IP地址等打印到文本中。

  2. 在复杂的多环节系统中,快速定位问题问题出错的环节,将各个系统数据接口的数据打印日志,如果有返回值可以判断执行是否成功,可以只打印错误的日志,出现问题时查看日志文件就可以定位是那个环节。

  3. 在异常捕获中将错误的信息打印成日志文件,快速查看代码或数据出现的问题。

日志的作用

一般程序日志出自下面几个方面的需求:

  • 记录用户操作的审计日志,甚至有的时候就是监管部门的要求。
  • 快速定位问题的根源
  • 追踪程序执行的过程。
  • 追踪数据的变化
  • 数据统计和性能分析
  • 采集运行环境数据

一般在程序上线之后,一旦发生异常,第一件事就是要弄清楚当时发生了什么。用户当时做了什么操作,环境有无影响,数据有什么变化,是不是反复发生等,然后再进一步的确定大致是哪个方面的问题。确定是程序的问题之后再交由开发人员去重现、研究、提出解决方案。这时,日志就给我们提供了第一手的资料。

撰写日志的要求

  • 日志的可读性

日志是给人读的,不仅仅是让自己明白,也要让没有接触过我们源代码的其他程序员也能够一目了然。有的同事在日志中打印特殊的标识符号,例如“++++++++++”, “===========”,这些符号令人眼花缭乱。另外,把日志分类输出到不同的文件也有利于我们排除干扰,迅速找到我们需要的信息。而且,最好在打印日志时输出英文,防止中文不支持而打印出乱码的情况。

  • 日志的性能

无论我们把日志写到文件还是数据库,都需要消耗IO资源。适当的控制日志的输出也有利于提高程序的性能。例如:尽量避免在在大的循环中打印意义不大的日志内容。输出日志之前最好能判断日志的级别(例如. debug前先调用isDebugEnabled()作出判断)。

  • 占用磁盘空间

通常,我们都是把日志写入磁盘上的日志文件中。适当的使用滚动日志并且定时清除旧文件是有好处的。我见过这样一个例子,程序运行几次后就跑不起来了,前几次都是正常的。怎么都想不明白程序有什么问题,最后才发现居然是日志文件占满了磁盘空间。在实际的应用中出现上G的日志文件也往往不少见。要在这样规模的日志文件中找出对解决问题有用的信息也是一大挑战。

  • 日志的时效性

有的时候我们并不能及时的发现问题。需要追溯之前的日志。所以我们是需要保留一段时间以内的日志便于追溯。

  • 日志级别

通常我们在产品环境中日志的级别都在INFO以上,所以我们必须保证在这样的情况下程序仍然能够输出足够我们作出判断的信息。

  • 日志内容

我们在写日志的时候,需要注意输出适当的内容。首先,尽量使用业务相关的描述。我们的程序是实现某种业务的,那么就最好能描述清楚这个时候走到了业务过程的哪一步。其次,避免在日志中输出一些敏感信息,例如用户名和密码。以及,要保持编码的一致。如果不能保证就尽量使用英文而不是中文。这样当我们拿到日志之后就不会因为看到一堆乱码而不知所云了。

  • 日志格式

常见的日志格式中对于每一条日志应含有的信息包括日期、时间、日志级别、代码位置、日志内容、错误码等信息。下面是一个工作中的日志文件的一部分内容:

代码实现


#include <iostream>
#include <afxtempl.h> //CException
#include <ATLComTime.h> //COleDateTime
#include <io.h>
#include <fcntl.h>
#include <stat.h>

using namespace std;

void PrintRunningLog(char *szbuff)
{

//AfxMessageBox(szbuff);
//打印
int clientNumber = 1;
CString strInfo;
CString strCurrentTime;
COleDateTime currentTime;
currentTime = COleDateTime::GetCurrentTime();
strCurrentTime=currentTime.Format("%Y-%m-%d %H:%M:%S"); //打印时间
strInfo = strCurrentTime;
strInfo +=" ";
strInfo +=szbuff;
strInfo +="\r\n";

CString strLogTxtName;
strLogTxtName.Format("log%d.txt",clientNumber); //文件名

FILE *stream;//文件流
if ((stream = fopen(strLogTxtName,"r")) == NULL)
{
fopen(strLogTxtName,"w");//新建
}
try
{
int fh = _open(strLogTxtName,_O_RDWR|_O_CREAT,_S_IREAD|_S_IWRITE);
if(fh != -1)
{
_lseek(fh,0L,SEEK_END);
_write(fh,strInfo,strlen(strInfo));
_close(fh);
}
}
catch(CException *pe)
{
pe->Delete();
}
}

int main ()
{
PrintRunningLog("test");
return 0 ;
}

测试例子比较简单,文件名为:1

文件名称截图

测试的日志内容也比较简单,根据实际情况,更换test内容

日志内容

参考资料

https://blog.csdn.net/lk142500/article/details/80424945

最新原创推荐:
一文轻松理解内存对齐

一文读懂C语言与C++动态内存

面试中常见的C语言与C++区别的问题

数据结构之线性表

深拷贝与浅拷贝到底是什么

JSON封装数据和解析数据

C/C++字符串操作的全面总结

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京2023年9月22日 /美通社/ -- 随着人工智能、云计算等技术的快速发展,算力需求爆发,服务器设计呈现多元异构特征,如何快速适配多种通用计算处理器、多种异构加速器和各类部件,实现服务器高效、稳定、可靠运行,对服务...

关键字: 三星 开源 英特尔 PEN

北京2023年9月21日 /美通社/ -- 近日,由开放数据中心委员会(ODCC)主办的2023“开放数据中心大会”在北京国际会议中心举行。今年是ODCC成立10周年,大会汇集了数据中心产业链上下游企业、科研机构、专家学...

关键字: 数据中心 TI PEN DC

北京2023年9月15日 /美通社/ -- 9月8日,2023年鲲鹏应用创新大赛陕西赛区决赛成功落幕。经过现场答辩、问题答疑等环节,软通动力"基于鲲鹏硬件的信创医共体解决方案" 最终荣获20...

关键字: 大赛 PEN 操作系统 华为

冠闵信息近年云收入保持双位数增长 北京2023年9月13日 /美通社/ -- 亚马逊云科技连续七年授予上海冠闵信息科技有限公司(以下简称:冠闵信息)托管服务提供商(MSP)认证,其借助亚马逊云科技在云能力、技术方案构建...

关键字: 亚马逊 数字化 SEARCH PEN

(全球TMT2023年9月4日讯)8月31日,第二十五届中国国际软件博览会在天津梅江会展中心拉开帷幕。软通动力子公司鸿湖万联受邀参会,通过展示开源生态建设成果,为中国软件产业腾飞提供“加速度”。 鸿湖万联...

关键字: PEN HARMONY AI 软件

北京2023年8月22日 /美通社/ -- 共聚软件名城,共谋数字未来。8月20日—8月23日由江苏省工业和信息化厅、南京市人民政府主办,南京市工业和信息化局、南京市软件集群发展促进机构承办的2023中国(南京)国际软件...

关键字: 开源 软件 鸿蒙 PEN

北京2023年8月16日 /美通社/ -- 近日,在备受业界关注的OCP China Day 2023(开放计算中国技术峰会)上,面对多元算力平台运维管理方面的重重挑战,浪潮信息正式发布了基于OpenBMC的I...

关键字: 固件 PEN 开源 芯片

(全球TMT2023年7月27日讯)近日,软通动力成功中标中国移动“云能力中心2023-2024年省专公司操作系统迁移技术服务项目”,份额位列中选企业第一。此次中标“中国移动云能力中心操作系统迁移技术服务项目”,进一步...

关键字: 中国移动 操作系统 PEN 鸿蒙

北京2023年8月7日 /美通社/ -- "多元算力时代下,大规模的异构服务器设备面临多种处理器架构、多种设备协议、不同管理芯片兼容的系统化设计挑战,管理固件也迎来新的变革。开源开放的OpenBMC,以创新的分...

关键字: 开源 PEN 固件 数据中心

(全球TMT2023年7月18日讯)2023年7月11日至7月13日举办的慕尼黑上海电子展取得了圆满成功。在展会现场,软通动力信息技术(集团)股份有限公司与深圳华秋电子有限公司正式签署了OpenHarmony硬件生态共...

关键字: 电子 硬件 PEN HARMONY
关闭
关闭