⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nllogger.cpp

📁 一些unix下的c/c++的util包
💻 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 + -