一、源代码说明
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、类的声明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class CLogFile { public: FILE *m_tracefp; char m_filename[301]; char m_openmode[11]; bool m_bEnBuffer; long m_MaxLogSize; bool m_bBackup;
CLogFile(const long MaxLogSize=100);
bool Open(const char *filename,const char *openmode=0,bool bBackup=true,bool bEnBuffer=false);
bool BackupLogFile();
bool Write(const char *fmt,...); bool WriteEx(const char *fmt,...);
void Close();
~CLogFile(); };
|
2、示例程序
示例(demo42.cpp)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
#include "../_freecplus.h"
int main() { CLogFile logfile;
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;
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; }
File.CloseAndRemove();
logfile.WriteEx("ok\n"); }
logfile.Write("demo42程序运行结束。\n"); }
|
先运行demo39程序,在/tmp/data目录中生成几个数据文件,然后运行demo42,将生成日志文件/tmp/log/demo42.log,内容如下:
3、日志文件的切换
我们通过一个示例程序的演示日志文件的切换功能,往日志文件中写入一千万数据,让它产生切换。
示例(demo43.cpp)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
#include "../_freecplus.h"
int main() { CLogFile logfile;
if (logfile.Open("/tmp/log/demo43.log")==false) { printf("logfile.Open(/tmp/log/demo43.log) failed.\n"); return -1; }
logfile.Write("demo43程序开始运行。\n");
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)
作者:码农有道