#include "OneLogWorker.h"
void* OneLogWorker::thread_worker(void *data)
{
OneLogWorker *self = (OneLogWorker *) data;
while(self->isRun() ||(!self->isRun() && self->hasLog()))
{
LogData *d = self->Pop();
if(d)
self->doLog(d);
else
usleep(5);
}
}
OneLogWorker::OneLogWorker(const char* config,const char * logger,int threadnum,int maxlogsize)
{
log4cxx::PropertyConfigurator::configure(config);
m_logger = Logger::getLogger(logger);
m_threadnum = threadnum;
m_logsize = maxlogsize;
m_pool = new MemPool(m_logsize);
setIsRun(true);
if(!m_pool) exit(1);
pthread_mutex_init(&mutex, NULL);
for (int i=0 ;i < m_threadnum ; i++)
{
pthread_create(&m_pid[i],NULL, &(OneLogWorker::thread_worker), this);
}
}
OneLogWorker::~OneLogWorker()
{
std::deque<LogData*>::iterator iter = m_buffQ.begin();
for(;iter != m_buffQ.end();iter++)
{
if(*iter) m_pool->Free(*iter);
}
m_buffQ.clear();
if(m_pool)
{
delete m_pool;
m_pool = NULL;
}
}
void OneLogWorker::waitWorkerEnd()
{
setIsRun(false);
std::map<int,pthread_t>::iterator iter = m_pid.begin();
for(; iter != m_pid.end();iter++)
{
pthread_join(iter->second, NULL);
}
}
OneLogWorker::LogData* OneLogWorker::Pop()
{
LogData* buf = NULL;
pthread_mutex_lock(&mutex);
if(m_buffQ.size())
{
buf = m_buffQ.front();
m_buffQ.pop_front();
}
pthread_mutex_unlock(&mutex);
return buf;
}
void OneLogWorker::Push(LogData *data)
{
pthread_mutex_lock(&mutex);
m_buffQ.push_back(data);
pthread_mutex_unlock(&mutex);
}
void OneLogWorker::doLog(LogData *data)
{
if(data && m_logger)
{
switch(data->type)
{
case LOG_TYPE_DEBUG:
LOG4CXX_DEBUG(m_logger, data->data);
break;
case LOG_TYPE_INFO:
LOG4CXX_INFO(m_logger, data->data);
break;
case LOG_TYPE_WARN:
LOG4CXX_WARN(m_logger, data->data);
break;
case LOG_TYPE_ERROR:
LOG4CXX_ERROR(m_logger, data->data);
break;
default:
break;
}
m_pool->Free(data);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于log4cxx封装的一个日志类
共8个文件
cpp:3个
h:2个
sh:1个
2星 需积分: 33 38 下载量 78 浏览量
2017-09-13
19:25:11
上传
评论
收藏 5KB ZIP 举报
温馨提示
基于log4cxx封装的一个日志类, 自己做记录用 方便下次使用的时候备份 不对的地方欢迎拍砖 就是为了方便打印日志
资源推荐
资源详情
资源评论
收起资源包目录
testlog4.zip (8个子文件)
testlog4
MemPool.cpp 1KB
log4cxx.properties 876B
.main.cpp.swp 12KB
MemPool.h 406B
readme.sh 153B
OneLogWorker.cpp 2KB
main.cpp 755B
OneLogWorker.h 2KB
共 8 条
- 1
资源评论
- 小痞子silence2018-10-20讲的很详细,很深入,喜欢
- newflexi10092018-07-03使用单例可以
城府迷虫
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功