写了个简单的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) |