当前位置:编程学习 > C/C++ >>

简单的分级别写日志程序

/************************************************************************/ 
/*
  * 文件名称:write_log.cpp
  * 摘    要:此文件实现了普通WINDOWS程序中的日志功能
  *           主要有以下特点:
  *           1. 根据日期创建日志文件目录,每天的日志分别存放在不同的日志目录中;
  *           2. 日志内容分三种类型,根据不同需要,写不同的日志类型的日志文件,
  *              方便通过日志定位、分析问题;
  *           3. 函数经过比较好的封装,便于复用;
  *           待改进点:
  *           1. 为了方便,日志内容打印时使用了time函数,其精确度较低;
  *           2. 可将这些函数封装为一个日志类,或者动态库,使其更通用;
  *           3. 没有考虑跨平台情景,目前只使用于WINDOWS下
  *           4. 日志文件内容还可进一步改进,比如打印出当前文件名与行号,使用日志功能
  *              更加实用;
  *
  * 当前版本:1.0
  * 作    者:duanyongxing 
  * 完成日期:2009年10月11日
*/                                                                      
/************************************************************************/ 
#ifndef __WRITELOG_H__  
#define __WRITELOG_H__  
#include "stdafx.h"  
#include <time.h>  
#include <memory.h>  
#include <stdio.h>  
#include <stdlib.h>   
#include <stdarg.h>  
#include <windows.h>  
#define _LOG_WRITE_STATE_ 1            /* 条件编译开关,1:写日志,0:不写日志 */  
#define LOG_SUCCESS (0)  
#define LOG_FAILED  (-1)  
#define LOG_BOOL_TRUE (1)  
#define LOG_BOOL_FALSE (0)  
#define DWORD_NULL  (0xFFFFFFFF)  
#define MAX_LOGTEXT_LEN (2048)         /* 每行日志的最大长度*/  
#define MAX_FILE_PATH (255)            /* 日志文件路径的最大长度*/  
#define MAX_LOG_FILE_SIZE (512 * 1024) /* 日志文件内容的最大长度*/  
#define MAX_LOG_FILE_NAME_LEN (256)    /* 日志文件名的最大长度*/  
 
#define LOG_TYPE_INFO    0             /* 日志类型: 信息类型*/  
#define LOG_TYPE_ERROR   1             /* 日志类型: 错误类型*/  
#define LOG_TYPE_SYSTEM  2             /* 日志类型: 系统类型*/  
#define TEST_CASE_MAX_FILE_LEN (1024)   /* 测试函数中文件内容最大长度*/  
const char g_LogRootPath[] = "C://My_APPLOG"; /*日志文件根路径,由用户指定*/ 
#pragma pack(push, 1)  
typedef struct tagLOG_DATA             /* 日志内容结构体*/ 

 char             strDate[11];   /* 日期:格式为如:2009-10-11*/ 
 char             strTime[9];    /* 时间:格式为如:16:10:57*/ 
 unsigned int  iType;         /* 日志类型:3种:INFO(0)/ERROR(1)/SYSTEM(2)*/ 
 char             strText[MAX_LOGTEXT_LEN]; /*日志内容*/ 
}LOG_DATA, *LPLOG_DATA; 
#pragma pack(pop)  
 
int Create_LogDir(const char *pStrPath); 
int Create_LogFile(const char *pStrFile, int iPos); 
int IsFileExist(const char *pStrFile); 
int GetLogPath(char *pStrPath); 
DWORD GetFileLenth(const char *pFile); 
int Write_Log_Text(LPLOG_DATA lpLogData); 
void Write_Log(unsigned int uiLogType, char *pstrFmt, ...); 
void TestLogCase_One(); 
 
int main(int argc, char* argv[]) 

    Write_Log(LOG_TYPE_SYSTEM, "Program begin."); 
 TestLogCase_One(); 
 Write_Log(LOG_TYPE_SYSTEM, "Program end."); 
 return 0; 

/*********************************************************************
* 函数名称:void TestLogCase_One()
* 说明:简单的测试函数,读文件
* 调用者:main
* 输入参数:
* 无
* 输出参数:
* 无
* 返回值:
* void  -- 
* 作者: duanyongxing
* 时间 : 2009-10-11
*********************************************************************/ 
void TestLogCase_One() 

    FILE *pFile = NULL; 
 char *pFieldContent = NULL; 
 char szFileName[] = "test_case.txt"; 
 pFieldContent = (char *)malloc(TEST_CASE_MAX_FILE_LEN); 
 if(NULL == pFieldContent) 
 { 
  Write_Log(LOG_TYPE_ERROR, "malloc memory failed,program exit!"); 
  return; 
 } 
 memset(pFieldContent, 0, TEST_CASE_MAX_FILE_LEN); 
 Write_Log(LOG_TYPE_INFO, "malloc memory for pFiled successful,memory size is: %ld", 
  TEST_CASE_MAX_FILE_LEN); 
 pFile = fopen(szFileName, "r"); 
 if(NULL == pFile) 
 { 
  fprintf(stderr, "open file failed."); 
        Write_Log(LOG_TYPE_ERROR, "Open file %s failed. program exit!", szFileName); 
  return; 
 } 
    Write_Log(LOG_TYPE_INFO, "Open file %s successful.", szFileName); 
 fread(pFieldContent, 1, TEST_CASE_MAX_FILE_LEN, pFile); 
    pFieldContent[TEST_CASE_MAX_FILE_LEN -1] = '/0'; 
  
 fclose(pFile); 
     
 printf("The file %s content is: /n%s/n", szFileName,  pFieldContent); 
 Write_Log(LOG_TYPE_INFO, "The file %s content is: /n%s/n", szFileName,  pFieldContent); 

/*********************************************************************
* 函数名称:void Write_Log(unsigned int uiLogType, char *pstrFmt, ...)
* 说明:日志写函数,支持变长参数
* 调用者:任何需要写日志的地
补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,