Log4Cpp 使用实例

Log4Cpp 使用实例Log4Cpp 的概念及简介自行百度 网络上已经很齐全了 下载编译呼 得到了 log4cpp dll 和 nbsp log4cpp lib 以及 include 头文件等内容 封装了个 Log4Cpp 的使用类 输出的效果如下 2017 02 2016 09 51 910 NOTICE Sys 进入了 CPfy log4cppDlg OnBnClickedB 函数 2017

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.源码下载

点击下载




















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214524.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:03
下一篇 2026年3月18日 下午4:03


相关推荐

  • 华为OJ机试训练(一)

    华为OJ机试训练(一)

    2022年1月28日
    51
  • USB设备驱动程序开发框架[通俗易懂]

    USB设备驱动程序开发框架[通俗易懂]USB设备驱动程序开发框架USB设备驱动程序开发框架的源代码文件文件名说明Driver.h驱动程序头文件DrvInit.c入口例程和卸载例程DrvPnp.c即插即用例程DrvDispatch.c分发例程DrvPowe

    2022年8月30日
    7
  • 快速幂算法(全网最详细地带你从零开始一步一步优化)

    快速幂算法(全网最详细地带你从零开始一步一步优化)快速幂算法 带你从零开始一步一步优化目录快速幂算法 带你从零开始一步一步优化什么是快速幂算法再次思考快速幂算法初步入门压榨性能再优化终极优化参考资料博客文章版权声明什么是快速幂算法首先 我们先来看一道 ACM 程序设计题 这道题是杭电 OJ 中序号为 2035 的题目 没做过这道题目的同学可以

    2026年3月20日
    2
  • QT之QFile[通俗易懂]

    QT之QFile[通俗易懂]1、QFile::QFile()构造一个没有名字的QFile对象2、QFile::QFile(constQString&name)构造一个以name为文件名的QFile对象。注:也可以QFile::QFile(),然后调用setName()方法来实现类似动作。3、bootQFile::atEnd()const[虚函数]如果已经到达文件末尾则返回TR

    2022年6月8日
    49
  • springboot使用swagger2生成api文档

    springboot使用swagger2生成api文档一、为什么要用Swagger2?之前开发项目的时候,需要写API文档,项目小接口少的时候一份word就能简单应付,但是随着项目的API的增加,对API文档的维护工作就会越来越繁琐,为此引入能自动生成

    2022年8月16日
    10
  • NOIP2008_2012年12月16号农历是

    NOIP2008_2012年12月16号农历是NOIP2012DAY1T1Vigenère密码纯模拟#include<bits/stdc++.h>chara[105],b[1005],ans[1005];intlen1,len2,h=1,p;intc[105];usingnamespacestd;intmain(){// freopen(“vigenere.in”,”r”,stdin); …

    2022年8月22日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号