📄 nllogger.cpp
字号:
/**
* 日志记录类实现
* @file NLLogger.cpp
* @date 14-Jul-2005
* @author 胡春雨
* @version 1.0.0: 初始版本
*/
#include "nlkit/NLLogger.h"
#include <sstream>
#include <iostream>
#include <unistd.h>
#include "nlkit/NLFileAppender.h"
#include "nlkit/NLJSAppender.h"
#include "nlkit/NLTSAppender.h"
#include "nlkit/NLSimpleLayout.h"
using namespace std;
using namespace nlkit;
NLLogger logger;
NLLogger::NLLogger()
{
m_level = DEBUGGING; // 默认DEBUGGING
}
NLLogger::NLLogger(Properties& cfgHandler, const char* seg_name)
{
init(cfgHandler, seg_name);
}
void NLLogger::init(Properties& cfgHandler, const char* seg_name, const char* fileAdorn, EventAdornHandle* eventAdornHandle)
{
m_pEventAdornHandle = eventAdornHandle;
string full_name("");
if (seg_name != NULL)
{
full_name = seg_name;
full_name += ".";
}
// 取附加器类型
string full_tmp_name = full_name + "log.appender";
APPENDER_TYPE type = (APPENDER_TYPE)cfgHandler.getInt(full_tmp_name);
// 取文件名
full_tmp_name = full_name + "log.filename";
string file_name = cfgHandler.getString(full_tmp_name);
if (fileAdorn)
file_name += fileAdorn;
// 取日志级别
full_tmp_name = full_name + "log.level";
NLLogLevel ll = (NLLogLevel)cfgHandler.getInt(full_tmp_name);
setLogLevel(ll);
// 取是否立即刷新
full_tmp_name = full_name + "log.immediateflush";
int i_immediateFlush = cfgHandler.getInt(full_tmp_name, NLLOG_IMMEDIATE_FLUSH);
bool bImmediateFlush = (i_immediateFlush == NLLOG_IMMEDIATE_FLUSH ? true : false);
// 取是否加装饰
full_tmp_name = full_name + "log.layout";
int layout = cfgHandler.getInt(full_tmp_name);
switch (type)
{
case FILE_APPENDER:
{
// 取打开模式
full_tmp_name = full_name + "log.openmode";
string open_mode = cfgHandler.getString(full_tmp_name, NLLOG_FILE_OPEN_MODE);
m_appender.reset(new NLFileAppender(file_name, open_mode.c_str(), bImmediateFlush, true));
}
break;
case SIZE_ROLLING_APPENDER:
{
// 取最大尺寸
full_tmp_name = full_name + "log.maxsize";
int maxFileSize = cfgHandler.getInt(full_tmp_name, NLLOG_MAX_FILE_SIZE);
long long size = (long long)maxFileSize * 1024;
// 取最大备份索引值
full_tmp_name = full_name + "log.maxindex";
int maxindex = cfgHandler.getInt(full_tmp_name, NLLOG_MAX_INDEX);
m_appender.reset(new NLRollingFileAppender(file_name, size, maxindex, bImmediateFlush, true));
}
break;
case TIME_ROLLING_APPENDER:
{
// 取最大备份索引值
full_tmp_name = full_name + "log.maxindex";
int maxindex = cfgHandler.getInt(full_tmp_name, NLLOG_MAX_INDEX);
// 取时间切换类型
full_tmp_name = full_name + "log.schedule";
NLDailyRollingSchedule schedule = (NLDailyRollingSchedule)cfgHandler.getInt(full_tmp_name, (int)DAILY);
m_appender.reset(new NLDailyRollingFileAppender(file_name, schedule, bImmediateFlush, maxindex, true));
}
break;
case PARALLEL_APPENDER:
{
// 取最大尺寸
full_tmp_name = full_name + "log.maxsize";
int maxFileSize = cfgHandler.getInt(full_tmp_name, NLLOG_MAX_FILE_SIZE);
long long size = (long long)maxFileSize * 1024;
// 取最大备份索引值
full_tmp_name = full_name + "log.maxindex";
int maxindex = cfgHandler.getInt(full_tmp_name, NLLOG_MAX_INDEX);
// 取时间切换类型
full_tmp_name = full_name + "log.schedule";
NLDailyRollingSchedule schedule = (NLDailyRollingSchedule)cfgHandler.getInt(full_tmp_name, (int)DAILY);
m_appender.reset(new NLParallelFileAppender(file_name, schedule, bImmediateFlush, size, maxindex, true));
}
break;
case JS_APPENDER:
{
// 取时间切换类型
full_tmp_name = full_name + "log.schedule";
NLDailyRollingSchedule schedule = (NLDailyRollingSchedule)cfgHandler.getInt(full_tmp_name, (int)DAILY);
m_appender.reset(new NLJSAppender(file_name, schedule, bImmediateFlush, true));
}
break;
case THREAD_SAFE_APPENDER:
{
// 取最大尺寸
full_tmp_name = full_name + "log.maxsize";
int maxFileSize = cfgHandler.getInt(full_tmp_name, NLLOG_MAX_FILE_SIZE);
long long size = (long long)maxFileSize * 1024;
// 取最大备份索引值
full_tmp_name = full_name + "log.maxindex";
int maxindex = cfgHandler.getInt(full_tmp_name, NLLOG_MAX_INDEX);
// 取时间切换类型
full_tmp_name = full_name + "log.schedule";
NLDailyRollingSchedule schedule = (NLDailyRollingSchedule)cfgHandler.getInt(full_tmp_name, (int)DAILY);
m_appender.reset(new NLTSAppender(file_name, schedule, bImmediateFlush, size, maxindex, true));
}
}
switch (layout)
{
case 1:
{
auto_ptr<NLLayout> aLayout(new NLSimpleLayout);
m_appender->setLayout(aLayout);
break;
}
default:
break;
}
}
NLLogger::~NLLogger()
{
}
void NLLogger::addAppender(auto_ptr<NLAppender> newAppender)
{
m_appender = newAppender;
}
void NLLogger::log(NLLogLevel ll, const string& message, const char* file, int line)
{
NLEvent event(ll, message, file, line, m_pEventAdornHandle);
if (m_appender.get() == NULL)
{
cerr << message;
if (NULL != file)
{
cerr << " [" << file << ":" << line << "]";
}
cerr << endl;
cerr.flush();
}
else
{
m_appender->write(event);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -