Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64425
  • 博文数量: 15
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-22 09:09
文章分类

全部博文(15)

文章存档

2009年(15)

我的朋友
最近访客

分类: C/C++

2009-04-17 17:26:47

写了个简单的logger
配置文件中内容:
loglevel=debug
可选等级为:debug,error,none
 
日志格式: [13-Apr-2009 15:37:52] [debug] log content
 
//log.h:
#ifndef _FCGILOGGER_H_
#define _FCGILOGGER_H_
#include
#include
#include "fcgio.h"
enum loglevel
{
 LOG_NONE = 0,
 LOG_ERROR,
 LOG_DEBUG
};
class CLogger
{
public:
 CLogger(const char* filename);
 virtual ~CLogger();
public:
 char* get_curr_time();
 void set_loglevel(const std::string strlevel);
 int debug_log(char* format, ...);
 int error_log(char* format, ...);
private:
 loglevel curlevel;
 char* strtime;
 char* buf;
 FILE* fp;
};
#endif
 
//log.cpp
 
#include
#include "log.h"
#include
#include

CLogger::CLogger(const char *filename)
 : curlevel(LOG_ERROR),
   strtime(new char[24]),
   buf(new char[512])
{
 if (filename != NULL)
 {
  fp = fopen(filename, "a");
  if (fp != NULL)
  {
   chmod(filename, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
  }
 }
}
CLogger::~CLogger()
{
 if (strtime != NULL)
 {
  delete[] strtime;
  strtime = NULL;
 }
 if (buf != NULL)
 {
  delete[] buf;
  buf = NULL;
 }
 fclose(fp);
}
void CLogger::set_loglevel(const std::string strlevel)
{
 if (!strlevel.compare("none"))
 {
  curlevel = LOG_NONE;
 }
 else if (!strlevel.compare("error"))
 {
  curlevel = LOG_ERROR;
 }
 else if (!strlevel.compare("debug"))
 {
  curlevel = LOG_DEBUG;
 }
 else
 {
  curlevel = LOG_NONE;
 }
 if (curlevel == LOG_NONE)
 {
  fclose(fp); 
 }
}
// get curr time looks like "17-Jan-2009 14:22:08"
char* CLogger::get_curr_time()
{
 time_t t_now;
 struct tm *tm_now;
 time(&t_now);
 tm_now = localtime(&t_now);
 strftime(strtime, 24, "%d-%b-%Y %H:%M:%S" , tm_now);
 return strtime;
}
int CLogger::debug_log(char* format, ...)
{
 char* tmp = get_curr_time();
 if (fp != NULL && curlevel == LOG_DEBUG)
 {
  va_list var_arg;
  va_start(var_arg, format);
  snprintf(buf, 511, "[%s] [debug] %s", tmp, format);
  vfprintf(fp, buf, var_arg);
  fflush(fp);
  va_end(var_arg);
 }
 return 0;
}
int CLogger::error_log(char* format, ...)
{
 char* tmp = get_curr_time();
 if (fp != NULL && (curlevel == LOG_ERROR || curlevel == LOG_DEBUG))
 {
  va_list var_arg;
  va_start(var_arg, format);
  snprintf(buf, 511, "[%s] [error] %s", tmp, format);
  vfprintf(fp, buf, var_arg);
  fflush(fp);
  va_end(var_arg);
 }
 return 0;
}
 
阅读(2309) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~