freecplus marco - las operaciones de archivo de registro

Una descripción código fuente

freecplus es un marco de C / C ++ de código abierto bajo un sistema Linux, vaya al código fuente en lenguaje C Tecnología de red (www.freecplus.net) descarga.

En este artículo se describe un archivo de registro de la operación del marco freecplus método.

funciones y clases expediente de declaración son freecplus / _freecplus.h.

funciones y clases de archivos de definición son freecplus / _freecplus.cpp.

Ejemplo de programa en el directorio freecplus / Demo que se encuentra.

archivo de reglas compilado es freecplus / demo / makefile.

Importancia del archivo de registro

Para el programa de servicio de la C / C ++, el programa que se ejecuta en segundo plano, sin interfaz de usuario, estado en funcionamiento sin vigilancia, el tratamiento de los datos de registro, y similares anormal del programa deben ser registrados en el archivo de registro, el archivo de registro de acuerdo con el personal de operación y mantenimiento de contenido, el estado del caso de la ejecución del programa y datos.

Tres, clase CLogFile

registro CLogFile programa de servicio de clase para el funcionamiento de registro del programa.

1, declaración de la clase

// 日志文件操作类
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, el programa de ejemplo

Ejemplo (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 ejecutar el programa en / tmp / datos de varios archivos de datos que se generan en el directorio, a continuación, ejecutar demo42, para generar archivos de registro /tmp/log/demo42.log, de la siguiente manera:

Aquí Insertar imagen Descripción

3 interruptor, el archivo de registro

Nosotros, diez millones de datos de escritura en un archivo de registro del archivo de registro por el cambio de presentación característica de un programa de ejemplo, se genera la conmutación.

Ejemplo (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 plazo, generará un número de archivos de registro en el directorio / tmp / log, ls uso -l / tmp / Ver registro de la siguiente manera:

Aquí Insertar imagen Descripción

En cuarto lugar, el aviso de copyright

C Tecnología de Red de Lenguaje artículo original, que se reproduce por favor indique el enlace de la fuente con el artículo, el autor y original.
Fuente: C Tecnología de red Idioma (www.freecplus.net)
Autor: Ética código de Agricultura

Si los errores tipográficos o errores de artículos, contenido, u otras sugerencias y comentarios, por favor mensaje yo correcta, muchas gracias! ! !

Publicados 159 artículos originales · ganado elogios 458 · vistas 120 000 +

Supongo que te gusta

Origin blog.csdn.net/wucz122140729/article/details/105187475
Recomendado
Clasificación