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);//URLsetLogIni(m_logUrl, strPath, "log_url.log", NAME_LOG_URL, strPattern, logConf);//SQLsetLogIni(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;}   //eTypeva_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.源码下载

点击下载

Log4Cpp 使用实例相关推荐

  1. 前端开发基础知识汇总

    一.HTML 1.前言与常用标签 浏览器 内核 备注 IE Trident IE.猎豹安全.360极速浏览器.百度浏览器 firefox Gecko 可惜这几年已经没落了,打开速度慢.升级频繁.猪一样 ...

  2. Spring Cloud微服务系统架构的一些简单介绍和使用

    Spring Cloud 目录 特征 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序上下文层次结构 改变Bootstrap的位置Properties ...

  3. c++ log4cpp的实现 包含使用实例和下载源码

    log4cpp源码下载点击此处下载 调用对应宏定义实现日志记录功能 流程 创建一个Appender,并指定其包含的Layout 从系统中得到Category的根,将Appender添加到该Catego ...

  4. 日志单例log4cpp简述

    1.log4test.cpp 自动对齐  gg=G 编译使用log4cpp库的CPP文件时,要加上库文件,如下示例    g++ log4test.cpp -llog4cpp -lpthread lo ...

  5. log4cpp的配置

    转自 http://www.usidcbbs.com/simple/?t1514.html C++日志库,log4cplus,log4cpp使用资料手册 1 下载log4cpp并解压. 2 打开\lo ...

  6. ECS(Linux)连接RDS,使用命令行方式连接实例

    使用命令行方式连接实例 通过命令行连接RDS MySQL数据库,连接方式如下: mysql -h<连接地址> -P<端口> -u<用户名> -p -D<数据库 ...

  7. Alibaba Cloud Linux 2.1903 LTS 64位服务器yum源下载404,Alibaba Cloud Linux 2实例中使用docker-ce、epel等YUM源安装软件失败

    [Alibaba Cloud Linux 2.1903 LTS 64位]服务器yum源下载404 failure: repodata/repomd.xml from docker-ce-stable: ...

  8. List元素互换,List元素转换下标,Java Collections.swap()方法实例解析

    Java Collections.swap()方法解析 jdk源码: public static void swap(List<?> list, int i, int j) {// ins ...

  9. Python 类—类属性(私有属性、公有属性、实例属性、局部变量)类方法(实例方法、静态方法)

    1. 创建类 类是对某个对象的定义,它包含有关对象动作方式的信息,包括它的名称.方法.属性和事件.类不存在于内存中,因此它本身并不是对象.当程序运行需要引用类的代码时,就会在内存中创建一个类的新实例, ...

  10. java局部变量全局变量,实例变量的理解

    java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...

最新文章

  1. 在Matlab中调用Mathematica的函数
  2. 网站压力测试工具webbench简介、安装、使用
  3. [译文]Domain Driven Design Reference(五)—— 为战略设计的上下文映
  4. Linux Mutex机制与死锁分析
  5. 一些Setup Factory 教程的链接
  6. ArcGIS自定义高程
  7. 【Python】 dict 以key名 去重运算
  8. 暑期训练日志----2018.8.16
  9. 关于C++中的pow()函数
  10. 定时压缩log日志文件
  11. 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动
  12. java.sql.SQLException: Access denied for user ‘root‘@‘hadoop001‘ (using password: YES)
  13. Bootstrap 中 表单和图片(二)
  14. oracle替换指定字符串字符_实例:替换方框内字符串内容
  15. APICloud开源O2O商城源码
  16. zoj1479 dweep soj1106 搜索
  17. 什么是物联网技术?物联网主要技术有哪些?
  18. Canvas实现太极图案并旋转
  19. 达梦数据库逻辑备份(dexp/dimp)
  20. [李景山php] ddos 防御基础

热门文章

  1. MCCSframework 教程(四)表单
  2. 测试低频噪音软件,低频噪音检测
  3. 解决mysql connection ODBC安装系统代码126错误 VC2013安装
  4. 安卓抓包工具、方式选择
  5. 蓝桥杯c语言试题(3)
  6. 如何用Primer6批量设计引物(非全cDNA引物)
  7. 背包九讲(超值得看的一大坨资料,附代码、视频、资料...)
  8. Hadoop——快速入门
  9. VTD信号灯TrafficLight数据解析提取
  10. ISP之色差增益抑制(Chroma Gain Suppression)