log4..简介

log4..是基于log4j的一系列的c++移植版本,使用了log4j的模式结构,目前主要有以下几个版本:
1. log4cxx, 目前是到0.10.0版,Apache下的孵化项目,不能独立编译,依赖于APR,编译比较麻烦,2008年以后就没再更新
2. log4cplus,目前最新版本是1.2.0,最近一次更新2016-01-16,不依赖于第三方库,下载位置https://sourceforge.net/projects/log4cplus/files/log4cplus-stable/1.2.0/
3. log4cpp,目前最新版本1.1.2,最近一次更新2016年-08-02,也不依赖与第三方库,与log4cplus功能类似,但是简化了一些实现,增加了一些功能,下载位置https://sourceforge.net/projects/log4cpp/files/?source=navbar

因为基本结构大致类似,性能上相比也没有明显差别,下面就选择log4cpp进行介绍

log4cpp基本结构

log4cpp从大的结构上分为日志类别(Category),日志追加器(Appender),日志布局(Layout),日志级别(Priority)。除此以外还提供了一些帮助类,简化我们对日志的代码设置。

  1. Category,日志输出主体类,提供了输出各种日志级别的方法,并且能够设置类别优先级,低于此优先级的类都不再输出,可以有多个分类,但每个应用程序都有一个root分类,其他分类都是root分类的子分类,有点类似于java的单继承结构,子分类的输出同时会输出到父分类中。
        // 根分类rootlog4cpp::Category& root = log4cpp::Category::getRoot();// 子分类subCat1log4cpp::Category& sub1 = log4cpp::Category::getInstance("sub1");root.error("test root error");root.warn("test root error");root.info("test root error");sub1.fatal("test sub1 error");sub1.notice("test sub1 error");sub1.debug("test sub1 error");
  1. Appender,主要是用来确定日志输出行为,例如输出到哪儿,如何输出。类Appender是由Category来加载的,一个Category可以加载多个Appender,输出到多个地方,一个Appender也可以被多个Category加载,但是有些Appender类没有设置互斥,日志的多线程支持主要是在Category里做的处理,因此不要使用一个Appender加载到多个Category中。
    // OstreamAppender:输出到输出流中(输出到控制台上)// FileAppender:输出到文件中// RollingFileAppender:输出到文件中并且能够设置文件最大超过多少时生成新文件// DailyRollingFileAppender:每天生成一个新文件// NTEventLogAppender:将日志输出到Windows事件日志中去// ...log4cpp::Appender *appender = new log4cpp::FileAppender("test", "D:/log4cppTest/log4cppTest.log");root.addAppender(appender);
  1. Layout,设置日志输出风格,有BasicLayout、SimpleLayout、PatternLayout,其中BasicLayout,SimpleLayout主要是提供的成型的简单日志风格,实际中基本不会使用,主要是使用PatternLayout对日志做格式输出,Layout是加载到Appender中去的。
    // %% 输出一个%// %c 输出Categroy名称// %d 输出日期// %m 输出消息// %n 输出换行// %p 输出Priority// %d{%Y-%m-%d %H:%M:%S:%l}对输出日期做定制,年月日时分秒毫秒// %t 线程IDlog4cpp::PatternLayout *patternLayout = new log4cpp::PatternLayout();patternLayout->setConversionPattern("%d{%Y-%m-%d %H:%M:%S.%l} %t [%p] %m %n");appender->setLayout(patternLayout);
  1. Priority,log4cpp有如下几级日志级别:

        typedef enum {EMERG  = 0,     // emergency FATAL  = 0,     // fatalALERT  = 100,   // alertCRIT   = 200,   // criticalERROR  = 300,   // errorWARN   = 400,   // wanningNOTICE = 500,   // noticeINFO   = 600,   // infomation DEBUG  = 700,   // debugNOTSET = 800    } PriorityLevel;

    其中每个Category都有一个level,低于此高于此level的日志将不会输出,比如Category设置priority为ERROR则,使用此Category输出的WARN,NOTICE等级别的日志都不会输出, 当Category的Priority设置为NOTSET时,该Categroy继承父Category的Priority;每个Appender也可以设置其threshold,当输出日志的Priority的值大于threshold时,此Appender将不会输出此条日志。

    // 代码设置root.setPriority(log4cpp::Priority::DEBUG);appender->setThreshold()
  1. 帮助类, log4cpp主要提供如下几个类来简化代码设置:SimpleConfigurator,BasicConfigurator,PropertyConfigurator,其中SimpleConfigurator和BasicConfigurator,主要是使用代码的方式,进行了一些简单的默认配置,而PropertyConfigurator,是通过配置文件的方式对日志进行配置,也是最常用的,下面就是配置文件的格式:

        #文件名为logTest.Property#配置root Category的Priority为DEBUG, Appender为rootAppenderlog4cpp.rootCategory=DEBUG, rootAppender#配置子Category sub1的Priority为DEBUG, Appender为A1log4cpp.category.sub1=DEBUG, A1 #配置rootAppender为FileAppenderlog4cpp.appender.rootAppender=FileAppender#配置日志文件名为test1.log,存放在D盘根目录下log4cpp.appender.rootAppender.fileName=D:/test1.log#配置layout为PatternLayoutlog4cpp.appender.rootAppender.layout=PatternLayout#设置日志输出风格log4cpp.appender.rootAppender.layout.ConversionPattern=%d{%Y-%m-%d %H:%M:%S.%l} %t [%p] %m %n#配置A1为RollingFileAppenderlog4cpp.appender.A1=RollingFileAppender#配置日志文件名为test2.log,存放在D盘根目录下log4cpp.appender.A1.fileName=D:/test2.log#配置日志文件最大不能超过1Mlog4cpp.appender.A1.maxFileSize=1024 * 1024#日志文件最多存储3个文件,超过就会删除旧的log4cpp.appender.A1.maxBackupIndex=2#设置日志风格log4cpp.appender.A1.layout=PatternLayoutlog4cpp.appender.A1.layout.ConversionPattern=%d{%Y-%m-%d %H:%M:%S.%l} %t [%p] %m %n// 代码设置配置文件log4cpp::PropertyConfigurator::configure(logTest.Property);

代码使用

获取到源代码后,找到源码目录中的msvc10目录,使用VS2010打开msvc10.sln解决方案文件,编译源码获得log4cpp.DLL和log4cpp.lib;在源码目录中有include文件夹,将include整个拷贝到我们的工程目录下,将include添加到工程属性中的附加包含目录中(QT工程则添加到INCLUDEPATH中去),这时就能够正常使用了。

log4cpp库的使用相关推荐

  1. Log4cpp介绍及使用

    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能.使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流.内存字符串队列.文件.回滚文件.调试器.Wind ...

  2. 日志单例log4cpp简述

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

  3. log4cpp 用法

    1 windows环境 1.1创建一个日志模板 staticbool bFirst = true; Logger_logger = Logger::getInstance(LOG4CPLUS_TEXT ...

  4. log4cpp初入门

    目录 下载与安装 log4cpp框架 Category Appender Layout Priorty Output 功能 日志级别 ⽇志格式化 ⽇志输出 日志回滚 日志配置文件 下载与安装 http ...

  5. MinGW编译log4cpp

    log4cpp的官网和下载地址 https://log4cpp.sourceforge.net/ https://sourceforge.net/projects/log4cpp/files/ 使用M ...

  6. c++ 工具库 (zz)

    下面是收集的一些开发工具包,主要是C/C++方面的,涉及图形.图像.游戏.人工智能等各个方面,感觉是一个比较全的资源.供参考! 原文的出处:http://www.codemonsters.de/hom ...

  7. 【C/C++开发】c++ 工具库 (zz)

    下面是收集的一些开发工具包,主要是C/C++方面的,涉及图形.图像.游戏.人工智能等各个方面,感觉是一个比较全的资源.供参考!  原文的出处:http://www.codemonsters.de/ho ...

  8. C++跨平台开源库 之一

    在如下的库支持下,开发的系统可以很方便移植到当前大部分平台上运行 而无需改动,只需在对应的平台下 用你喜欢的编译器 重新编译即可 经典的C++库 STLport---SGI STL库的跨平台可移植版本 ...

  9. 基于LGPL开源项目 Log4cpp安装与使用

    [IT168 专稿]Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能.使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流.内存字符串队列.文件.回滚文 ...

最新文章

  1. php转义和去掉html、php标签函数
  2. sql注入攻击与防御第二版读书笔记二——SQL盲注利用
  3. 指针变量的定义与引用
  4. Linux C编程一些优秀的博客链接
  5. 解决Unable to locate theme engine in module_path: pixmap
  6. mysql腾讯面试题_2020腾讯阿里精选面试题100+(包含答案)
  7. 微信回应发原图泄露位置信息;华为员工索要离职补偿被起诉;Windows Terminal v0.7 发布 | 极客头条...
  8. IOS开发的一些好的建议和小技术
  9. 用 Python 写一个 NoSQL 数据库
  10. iOS多线程 的 线程同步
  11. gromacs ngmx_Jerkwin.github.io
  12. 图片识别出处_搜图神器!你还在问图片的出处吗?
  13. sql中把字符串类型转化
  14. www-authenticate
  15. wrcoef2函数_二维离散小波变换函数使用总结
  16. 关于Trunk封装的协议和模式。如何配置trunk
  17. java 使用poi HSSFWorkbook导出xls文件 office打不开,提示文件损坏,wps能打开。
  18. java 双屏显示_程序员,你双屏了吗?
  19. 【python作业】编写一个函数,由实参传来一个字符串,统计此字符串中字母和数字的个数,在主函数中输入字符串并输出上述的结果。
  20. javascript 获取上级、同级和下级元素

热门文章

  1. 怎么删除电脑服务器远程桌面连接,删除远程桌面服务客户端访问许可证
  2. 标准差-经验法则-中心极限定理
  3. PCIE 3.0 4.0 GEN3 GEN4 速度如何
  4. 支持向量机原理_支持向量机
  5. java判断字符串长度_java判断中文字符串长度的简单实例
  6. 百度:自动驾驶出租车服务在北京全面开放!人工智能牛
  7. 李航统计学习感知机算法实现
  8. Android加密篇 MD5
  9. Java怎么写相对路径的问题
  10. TFS2010 创建项目时提示“未能解析远程主机”的解决办法