freecplus框架-日志文件操作
2020-04-01 17:22
295 查看
[toc]
一、源代码说明
freecplus是一个Linux系统下的C/C++开源框架,源代码请前往C语言技术网(www.freecplus.net)下载。
本文介绍的是freecplus框架中日志文件操作的方法。
函数和类的声明文件是freecplus/_freecplus.h。
函数和类的定义文件是freecplus/_freecplus.cpp。
示例程序位于freecplus/demo目录中。
编译规则文件是freecplus/demo/makefile。
二、日志文件的意义
对于C/C++服务程序来说,程序运行在后台,没有操作界面,无人值守,程序运行的状态、数据处理的日志、程序的异常等必须记录在日志文件中,运维人员根据日志文件的内容,查看程序运行和数据处理的情况。
三、CLogFile类
CLogFile类用于服务程序记录程序的运行日志。
1、类的声明
// 日志文件操作类 class CLogFile { public: FILE *m_tracefp; // 日志文件指针。 char m_filename[301]; // 日志文件名,建议采用绝对路径。 char m_openmode[11]; // 日志文件的打开方式,一般采用"a+"。 bool m_bEnBuffer; // 写入日志时,是否启用操作系统的缓冲机制,缺省不启用。 long m_MaxLogSize; // 最大日志文件的大小,单位M,缺省100M。 bool m_bBackup; // 是否自动切换,日志文件大小超过m_MaxLogSize将自动切换,缺省启用。 // MaxLogSize:最大日志文件的大小,单位M,缺省100M,最小为10M。 CLogFile(const long MaxLogSize=100); // 打开日志文件。 // filename:日志文件名,建议采用绝对路径,如果文件名中的目录不存在,就先创建目录。 // openmode:日志文件的打开方式,与fopen库函数打开文件的方式相同,缺省值是"a+"。 // bBackup:是否自动切换,true-切换,false-不切换,在多进程的服务程序中,如果多个进行共用一个日志文件,bBackup必须为false。 // bEnBuffer:是否启用文件缓冲机制,true-启用,false-不启用,如果启用缓冲区,那么写进日志文件中的内容不会立即写入文件,缺省是不启用。 bool Open(const char *filename,const char *openmode=0,bool bBackup=true,bool bEnBuffer=false); // 如果日志文件大于100M,就把当前的日志文件备份成历史日志文件,切换成功后清空当前日志文件的内容。 // 备份后的文件会在日志文件名后加上日期时间。 // 注意,在多进程的程序中,日志文件不可切换,多线的程序中,日志文件可以切换。 bool BackupLogFile(); // 把内容写入日志文件,fmt是可变参数,使用方法与printf库函数相同。 // Write方法会写入当前的时间,WriteEx方法不写时间。 bool Write(const char *fmt,...); bool WriteEx(const char *fmt,...); // 关闭日志文件 void Close(); ~CLogFile(); // 析构函数会调用Close方法。 };
2、示例程序
示例(demo42.cpp)
/* * 程序名:demo42.cpp,此程序演示采用freecplus框架的CLogFile类记录程序的运行日志。 * 本程序修改demo40.cpp把输出的printf语句改为写日志文件。 * 作者:C语言技术网(www.freecplus.net) 日期:20190525 */ #include "../_freecplus.h" int main() { CLogFile logfile; // 打开日志文件,如果"/tmp/log"不存在,就创建它,但是要确保当前用户具备创建目录的权限。 if (logfile.Open("/tmp/log/demo42.log")==false) { printf("logfile.Open(/tmp/log/demo42.log) failed.\n"); return -1; } logfile.Write("demo42程序开始运行。\n"); CDir Dir; // 扫描/tmp/data目录下文件名匹配"surfdata_*.xml"的文件。 if (Dir.OpenDir("/tmp/data","surfdata_*.xml")==false) { logfile.Write("Dir.OpenDir(/tmp/data) failed.\n"); return -1; } CFile File; while (Dir.ReadDir()==true) { logfile.Write("处理文件%s...",Dir.m_FullFileName); if (File.Open(Dir.m_FullFileName,"r")==false) { logfile.WriteEx("failed.File.Open(%s) failed.\n",Dir.m_FullFileName); return -1; } // 这里可以插入读取数据文件的内容、解析xml字符串并把数据写入数据库的代码。 // 读取文本数据用Fgets和FFGETS方法,读取二进制数据用Fread方法。 // 具体的代码我就不写了。 // 处理完文件中的数据后,关闭文件指针,并删除文件。 File.CloseAndRemove(); logfile.WriteEx("ok\n"); } logfile.Write("demo42程序运行结束。\n"); }
先运行demo39程序,在/tmp/data目录中生成几个数据文件,然后运行demo42,将生成日志文件/tmp/log/demo42.log,内容如下:
3、日志文件的切换
我们通过一个示例程序的演示日志文件的切换功能,往日志文件中写入一千万数据,让它产生切换。
示例(demo43.cpp)
/* * 程序名:demo43.cpp,此程序演示freecplus框架的CLogFile类的日志文件的切换。 * 作者:C语言技术网(www.freecplus.net) 日期:20190525 */ #include "../_freecplus.h" int main() { CLogFile logfile; // 打开日志文件,如果"/tmp/log"不存在,就创建它,但是要确保当前用户具备创建目录的权限。 if (logfile.Open("/tmp/log/demo43.log")==false) { printf("logfile.Open(/tmp/log/demo43.log) failed.\n"); return -1; } logfile.Write("demo43程序开始运行。\n"); // 让程序循环10000000,生成足够大的日志。 for (int ii=0;ii<10000000;ii++) { logfile.Write("本程序演示日志文件的切换,这是第%010%d条记录。\n",ii); } logfile.Write("demo43程序运行结束。\n"); }
运行demo43,将在/tmp/log目录中产生一批日志文件,用ls -l /tmp/log查看如下:
四、版权声明
C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。 来源:C语言技术网(www.freecplus.net) 作者:码农有道
如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!
相关文章推荐
- freecplus框架-文件操作
- freecplus框架-字符串操作
- Qt---log日志框架(2)从性能考虑文件操作
- 文件处理:目录操作框架搭建之日志功能
- 编写文件搜索小程序:1. 输入绝对路径以及搜索关键字,2. 搜索指定路径下(包括子文件夹)中名称包含关键字的所有文件并打印出,3. 将当前操作记录日志
- syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志
- ★实验 8-2 1. 创建两个守候进程。每个守候进程各自创建独立的日志文件。 2. 每隔 1s 向日志文件中写入如下信息: a) 守候进程 1:未使用的内存大小(MemFree) b) 守
- html制作简单框架网页 实现自己的音乐驿站 操作步骤及源文件下载 (播放功能限mp3文件)
- Python Flask & Django框架中配置logging日志文件
- 关于delphi的log的class已经完成,一如既往的open 他delphi ,日志class,临界区,文件操作
- Android adb命令大全(通过adb命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)
- 截取与分析日志文件的特定行数的操作
- Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)
- Spark API编程动手实战-06-对搜狗日志文件深入实战操作
- 日志文件操作(写入,读取,清空)
- Foundation框架之文件操作
- oracle impdp导入时 提示“ORA-39002: 操作无效 ORA-39070: 无法打开日志文件 ”
- mysql如何查看二进制日志文件(mysql的操作的记录)
- 操作日志及日志文件组
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作