Log4Cpp 使用实例


Log4Cpp 的概念及简介自行百度,网络上已经很齐全了。

下载编译呼,得到了log4cpp.dll 和 log4cpp.lib 以及 include 头文件等内容。

封装了个Log4Cpp的使用类,输出的效果如下:

[2017-02-20 16:09:51.910](NOTICE)Sys : 进入了CPfy_log4cppDlg::OnBnClickedButton1函数
[2017-02-20 16:09:51.911](NOTICE)Sys : 写入系统日志
[2017-02-20 16:09:51.911](NOTICE)Sys : 退出了CPfy_log4cppDlg::OnBnClickedButton1函数
[2017-02-20 16:10:46.190](NOTICE)Sys : 进入了CPfy_log4cppDlg::OnBnClickedButton1函数
[2017-02-20 16:10:46.191](NOTICE)Sys : 写入系统日志
[2017-02-20 16:10:46.191](DEBUG)Sys : 写入系统日志-debug 级别
[2017-02-20 16:10:46.193](NOTICE)Sys : 退出了CPfy_log4cppDlg::OnBnClickedButton1函数
[2017-02-20 16:10:47.047](DEBUG)Sys : 进入了CPfy_log4cppDlg::OnBnClickedButton2函数
[2017-02-20 16:10:47.885](DEBUG)Sys : 退出了CPfy_log4cppDlg::OnBnClickedButton2函数
[2017-02-20 16:11:48.813](NOTICE)Sys : 进入了CPfy_log4cppDlg::OnBnClickedButton1函数
[2017-02-20 16:11:48.814](NOTICE)Sys : 写入系统日志
[2017-02-20 16:11:48.814](DEBUG)Sys : 写入系统日志-debug 级别
[2017-02-20 16:11:48.814](NOTICE)Sys : 退出了CPfy_log4cppDlg::OnBnClickedButton1函数
[2017-02-20 16:11:49.733](DEBUG)Sys : 进入了CPfy_log4cppDlg::OnBnClickedButton2函数
[2017-02-20 16:11:50.571](DEBUG)Sys : 退出了CPfy_log4cppDlg::OnBnClickedButton2函数

文末会放上源码工程,这里介绍下主要的功能函数


1.类初始化

在使用项目的stdafx.h 中包含封装类头文件  
#include "Log4CppPfy.h" 

然后在 InitInstance() 中加入 
CLog4CppPfy::InitInstance();

初始化函数如下

void CLog4CppPfy::InitInstance()
{
	//log日志文件路径
	const string strPath = "D:\\My Documents\\Pfy_Log";

	//样式 
	const string strPattern = "[%d{%Y-%m-%d %H:%M:%S.%l}](%p)%c %x: %m%n";

	//级别,文档最大容量,文档最大数量
	LogConf logConf = getConf();

	//设置各个类型的log样式级别

	//系统
	setLogIni(m_logSys, strPath, "log_sys.log", NAME_LOG_SYS, strPattern, logConf);

	//URL
	setLogIni(m_logUrl, strPath, "log_url.log", NAME_LOG_URL, strPattern, logConf);

	//SQL
	setLogIni(m_logSql, strPath, "log_sql.log", NAME_LOG_SQL, strPattern, logConf);
}

其中m_logSys 就是log4cpp::Category,我这定了的是全局变量

log4cpp::Category &CLog4CppPfy::m_logSys = log4cpp::Category::getInstance(NAME_LOG_SYS);
log4cpp::Category &CLog4CppPfy::m_logUrl = log4cpp::Category::getInstance(NAME_LOG_URL);
log4cpp::Category &CLog4CppPfy::m_logSql = log4cpp::Category::getInstance(NAME_LOG_SQL);


setLogIni函数如下:

void CLog4CppPfy::setLogIni( log4cpp::Category &category, 
							const string& strPath, 
							const string& strFile, 
							const string& strAppenderName, 
							const string& strPattern, 
							const LogConf& logConf )
{
	string strAbsPath = strPath + "\\" + strFile;
	log4cpp::Appender *appender = new log4cpp::RollingFileAppender(strAppenderName, strAbsPath, \
		logConf.maxFileSize*1024*1024, logConf.maxBackupIndex);//创建输出目标文件
	log4cpp::PatternLayout *layout = new log4cpp::PatternLayout();
	layout->setConversionPattern(strPattern);
	appender->setLayout(layout);//设置样式
	category.setAdditivity(false);
	category.setAppender(appender);//设置创建好的输出源
	category.setPriority(logConf.priority);//设置优先级
}


2.输出日志

初始化了完了,下面就是使用的时候直接输出日志了,log4cpp可以设置很多个输出级别,这里只是定义了2个:notice 和 debug 

封装好的notice函数如下:

void CLog4CppPfy::notice( LogType eType, const char* stringFormat, ... )
{
	va_list va;
	va_start(va, stringFormat);
	switch(eType)
	{
	case LOG_SYS:
		{
			m_logSys.logva(log4cpp::Priority::NOTICE, stringFormat, va);
		}
		break;
	case LOG_URL:
		{
			m_logUrl.logva(log4cpp::Priority::NOTICE, stringFormat, va);
		}
		break;
	case LOG_SQL:
		{
			m_logSql.logva(log4cpp::Priority::NOTICE, stringFormat, va);
		}
		break;
	default:
		break;
	}   //eType
	va_end(va);

}


使用的话就是

	CLog4CppPfy::notice(CLog4CppPfy::LOG_SYS,"写入系统日志");
	CLog4CppPfy::debug(CLog4CppPfy::LOG_SYS,"写入系统日志-debug 级别");

	CLog4CppPfy::notice(CLog4CppPfy::LOG_URL,"写入网络日志");
	CLog4CppPfy::debug(CLog4CppPfy::LOG_URL,"写入网络日志-debug 级别");

	CLog4CppPfy::notice(CLog4CppPfy::LOG_SQL,"写入数据库操作日志");
	CLog4CppPfy::debug(CLog4CppPfy::LOG_SQL,"写入数据库操作日志-debug 级别");


3.源码下载

点击下载

你可能感兴趣的:(C++)