精华内容
下载资源
问答
  • log4cpp

    2015-10-06 21:35:13
    #include "log4cpp/Category.hh" #include "log4cpp/OstreamAppender.hh" #include "log4cpp/BasicLayout.hh" #include "log4cpp/Priority.hh" #include "log4cpp/PatternLayout.hh" #include "log4cpp/SimpleL

    #include "log4cpp/Category.hh"
    #include "log4cpp/OstreamAppender.hh"
    #include "log4cpp/BasicLayout.hh"
    #include "log4cpp/Priority.hh"
    #include "log4cpp/PatternLayout.hh"
    #include "log4cpp/SimpleLayout.hh"

    #include "vld.h"
    //#pragma comment(lib,"vld.lib")


    #ifdef _DEBUG
        #pragma comment(lib,"log4cppd.lib")
    #else
        #pragma comment(lib,"log4cpp.lib")
    #endif


    void TestLog4cpp()
    {
        std::ofstream ofs("c:\\zhou.txt",std::ios::app);
        if (!ofs.is_open()) return;

     //  log4cpp::OstreamAppender* osAppender = new log4cpp::OstreamAppender("osAppender", &cout);
        log4cpp::OstreamAppender* osAppender = new log4cpp::OstreamAppender("osAppender", &ofs);
        log4cpp::PatternLayout *patternLayout = new log4cpp::PatternLayout();
        patternLayout->setConversionPattern("%d{%H:%M:%S} %p %c %x: %m %n");
        osAppender->setLayout(patternLayout);

        log4cpp::Category& root = log4cpp::Category::getRoot();

        root.addAppender(osAppender);

        root.setPriority(log4cpp::Priority::DEBUG);

        root.error("Hello log4cpp in aError Message!");

        root.warn("Hello log4cpp in aWarning Message!");
        root.debug("test debug");
        root.info("%s %d: %s", __FILE__, __LINE__, "this is a 测试一下");
        

        log4cpp::Category::shutdown();
        ofs.close();
    }


    展开全文
  • Log4cpp

    2013-06-07 17:21:05
    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Windows日志、syslog和远程...
    简介 
    
    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用 日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、 调试器Windows日志、syslog和远程syslog服务器中。

    编辑本段优点

    Log4cpp是个基于LGPL的开源项目,移植自Java的日志处理跟踪项目log4j,并保持了API上的一致。其类似的支持库还包括Java(log4j),C++(log4cpp、log4cplus),C(log4c),python(log4p)等。
    Log4cpp有如下优点:
    1. 提供了可扩展的多种日志记录方式;
    2. 提供了NDC(嵌套诊断上下文),可用于多线程、多场景的跟踪调试;
    3. 提供了完整的日志动态优先级控制,可随时调整需要记录的日志优先级;
    4. 可通过配置文件完成所有配置并动态加载;
    5. 性能优秀,内存占用小,经过编译后的log4cpp.dll大小仅有160kb;
    6. 代码级的平台无关性,Log4cpp 源代码经过编译后,适用于大多数主流的操作系统和开发工具;
    7. 概念清晰,学习和使用方便,熟练 程序员一天之内即可很好地应用log4cpp进行开发

    编辑本段下载安装

    2.1 下载
    下载版本0.3.5rc3,这个版本目前是最稳定的,版本1.0在VC中表现不稳定。下载后的包名字为:log4cpp-0.3.5rc3.tar.gz(源代码包)和log4cpp-docs-0.3.5rc3.tar.gz(文档压缩包)。将它们解压后放入D盘。
    2.2 在VC6中编译Log4cpp
    进入D:\log4cpp-0.3.5rc3\msvc6目录,打开VC6的工作区msvc6.dsw,将其中的工程都删除,只保留log4cpp和log4cppDLL两个工程。分别编译它们的Debug和Release版本。
    在VC6中编译Log4cpp会报错,其实只有一个错误,即不能在头文件中定义 变量,同时给变量赋默认值。修改方法如下:将头文件Priority.hh中的这一行:
    static const int MESSAGE_SIZE = 8;
    改为:
    static const int MESSAGE_SIZE;
    并在Priority.cpp中的所有include语句后加上:const int log4cpp::Priority::MESSAGE_SIZE = 8;
    编译链接成功后会得到log4cppD.dll、log4cppD.lib(Debug版的dll和lib文件)和log4cpp.dll、log4cpp.lib(Release版的dll和lib文件)。新建目录D:\log4cpp-0.3.5rc3\lib,将以上四个文件拷贝到该目录下。 在VC中添加设置lib和include路径。
    将D:\log4cpp-0.3.5rc3\lib加入系统的Path路径中。

    编辑本段编译方法

    让我们从一个简单的例子开始,该例子将两条 日志信息写入字符串流,该流会在标准控制台cout上输出,项目的名称是HelloLog4Cpp:
    #include <iostream>
    #include "log4cpp/Category.hh"
    #include "log4cpp/OstreamAppender.hh"
    #include "log4cpp/BasicLayout.hh"
    #include "log4cpp/Priority.hh"
    using namespace std;
    int main(int argc, char* argv[])
    {
    log4cpp::OstreamAppender* osAppender = new log4cpp::OstreamAppender("osAppender", &cout);
    osAppender->setLayout(new log4cpp::BasicLayout());
    log4cpp::Category& root = log4cpp::Category::getRoot();
    root.addAppender(osAppender);
    root.setPriority(log4cpp::Priority::DEBUG);
    root.error("Hello log4cpp in a Error Message!");
    root.warn("Hello log4cpp in a Warning Message!");
    log4cpp::Category::shutdown();
    return 0;
    }
    要顺利编译运行还有两个地方需要设置,其一是引入的库中加上log4cppD.lib(debug版dll库的引入文件),即在头文件处加上#pragma comment(lib, "log4cppD.lib");其二是将C/C++的Code Generation中的Use Runtime library设置为“Debug Multithreaded DLL”。 设置完成后编译运行结果如下:
    1248337987 ERROR : Hello log4cpp in a Error Message!
    1248337987 WARN : Hello log4cpp in a Warning Message!
    以上两条日志格式很简陋,要设置合乎心意的日志格式,请参考后续的PatternLayout章节。

    编辑本段概念

    Log4cpp中的概念继承自log4j,最重要的是Category(种类)、Appender(附加目的地)和Layout(布局)三个概念,此外还有Priority(优先级)和NDC(嵌套的诊断上下文)等。
    简言之,Category负责向 日志中写入信息,Appender负责指定日志的目的地,Layout负责设定日志的格式,Priority被用来指定Category的优先级和日志的优先级, NDC则是一种用来区分不同场景中交替出现的日志的手段。
    Log4cpp记录日志的原理如下:每个Category都有一个优先级,该优先级可以由setPriority方法设置,或者从其父Category中继承而来。每条日志也有一个优先级,当Category记录该条日志时,若日志优先级高于Category的优先级时,该日志被记录,否则被忽略。系统中默认的优先级等级如下:
    typedef enum ...{EMERG = 0,
    FATAL = 0,
    ALERT = 100,
    CRIT = 200,
    ERROR = 300,
    WARN = 400,
    NOTICE = 500,
    INFO = 600,
    DEBUG = 700,
    NOTSET = 800
    } PriorityLevel;
    注意:取值越小,优先级越高。 例如一个Category的优先级为101,则所有EMERG、FATAL、ALERT 日志都可以记录下来,而其他则不能。
    Category、Appender和Layout三者的关系如下:系统中可以有多个Category,它们都是继承自同一个根,每个Category负责记录自己的日志;每个Category可以添加多个Appender,每个Appender指定了一个日志的目的地,例如文件、字符流或者 Windows日志,当Category记录一条日志时,该日志被写入所有附加到此Category的Appender;每个Append都包含一个Layout,该Layout定义了这个Appender上日志的格式。
    重温前面的HelloWorld程序,可以发现其流程如下:
    1. 创建一个Appender,并指定其包含的Layout;
    2. 从系统中得到Category的根,将Appender添加到该Category中;
    3. 设置Category的优先级;
    4. 记录日志;
    5. 关闭Category。
    下面,我们按照Layout、Appender、Category、NDC的顺序来依次介绍这些概念并给出例子。

    编辑本段布局

    首先回顾一下HelloWorld的日志格式,它使用了最简单的BasicLayout:

    1248337987 ERROR : Hello log4cpp in a Error Message!

    1248337987 WARN : Hello log4cpp in a Warning Message!
    上面的 日志格式还可以,但显然不是许多 程序员心中理想的格式,许多人理想的格式应该是这样的:

    2009-07-24 15:59:55,703: INFO infoCategory : system is running

    2009-07-24 15:59:55,703: WARN infoCategory : system has a warning

    2009-07-24 15:59:55,703: ERROR infoCategory : system has a error, cant find a file

    2009-07-24 15:59:55,718: FATAL infoCategory : system has a fatal error, must be shutdown

    2009-07-24 15:59:55,718: INFO infoCategory : system shutdown, you can find some information in system log
    要获得上面的格式,必须使用比BasicLayout复杂的PatternLayout,而且要花一个小时来熟悉一下PatternLayout的格式定义方式,如果你认为值得的话。  5.1 PatternLayout
    在介绍PatternLayout以前,首先来看看log4cpp中所有的Layout子类(Layout本身是个 虚类),一共三个:BasicLayout、PatternLayout和SimpleLayout,其中SimapleLayout并不建议使用,而BaiscLayout过于简单,因此如果程序员不自己扩展Layout的话,就只能使用PatternLayout了,值得庆幸的是,PatternLayout还是比较好用的。
    PatternLayout使用setConversionPattern函数来设置日志的输出格式。该函数的声明如下:

    void log4cpp::PatternLayout::setConversionPattern ( const std::string & conversionPattern ) throw (ConfigureFailure) [virtual]
    其中参数类型为std::string,类似于C语言中的printf,使用格式化字符串来描述输出格式,其具体含义如下:

    %c category;

    %d 日期;日期可以进一步的设置格式,用花括号包围,例如%d{%H:%M:%S,%l} 或者 %d{%d %m %Y %H:%M:%S,%l}。如果不设置具体日期格式,则如下默认格式被使用“Wed Jan 02 02:03:55 1980”。日期的格式符号与ANSI C函数strftime中的一致。但增加了一个格式符号%l,表示毫秒,占三个十进制位。

    %m 消息;

    %n 换行符,会根据平台的不同而不同,但对于用户透明;

    %p 优先级;

    %r 自从layout被创建后的毫秒数;

    %R 从1970年1月1日0时开始到目前为止的秒数;

    %u 进程开始到目前为止的时钟周期数;

    %x NDC。
    因此,要得到上述的理想格式,可以将setConversionPattern的参数设置为“%d: %p %c %x: %m%n”,其具体含义是“时间: 优先级 Category NDC: 消息 换行”。
    展开全文
  • Log4cpp log4cpp快速使用指南

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    • 简介: log4cpp是个基于LGPL的开源项目,是基于优秀的日志处理跟踪项目Java语言的log4j移植过来的。log4j介绍的文档很多,在java领域使用的也比较广泛,而这个功能强大的库对国内的C++语言开发人员却使用的不多。这里从开发人员使用的角度介绍这个库,使开发人员用最少的代价尽快掌握这种技术。下面先简单介绍一下这个项目的优点(也是log4j的优点),然后分原理,手动使用步骤,配置文件驱动方式使用步骤,其他考虑等方面进行讨论。以下讨论基于log4cpp0.3.4b。
    • 优点:
    • 提供应用程序运行上下文,方便跟踪调试; 
    • 可扩展的、多种方式记录日志,包括命令行、文件、回卷文件、内存、syslog服务器、Win事件日志等; 
    • 可以动态控制日志记录级别,在效率和功能中进行调整; 
    • 所有配置可以通过配置文件进行动态调整; 
    • 多语言支持,包括Java(log4j),C++(log4cpp、log4cplus),C(log4c),python(log4p)等; 


    1. 原理

     log4cpp有3个主要的组件:categories(类别)、appenders(附加目的地)、和 layouts(布局)。(为了方便大家理解,文中尽量使用英文原词)

    l ayout类控制输出日志消息的显示样式(看起来像什么)。log4cpp当前提供以下layout格式:

    log4cpp::BasicLayout     // 以“时间戳 优先级(priority,下文介绍)// 类别(category,下文介绍)// NDC标签(nested diagnostic contexts 下文介绍): 日志信息”。// 如:1056638652 INFO main : This is some info log4cpp::PatternLayout// 让用户根据类似于 C 语言 printf 函数的转换模式//来指定输出格式。格式定义见代码附带文档。log4cpp::SimpleLayout// 以“优先级(priority) - 日志信息”格式显示。

    appender类用来输出日志(被layout格式化后的)到一些设备上。比如文件、syslog服务、某个socket等。可以定义自己的appender类输出日志信息到别的设备上,比如应用自身的日子处理进程、数据库等。appender和layout的关系是layout附在appender上,appender类调用layout处理完日志消息后,记录到某个设备上。log4cpp当前提供以下appender:

    log4cpp::IdsaAppender         // 发送到IDS或者logger, 详细见 http://jade.cs.uct.ac.za/idsa/log4cpp::FileAppender        // 输出到文件log4cpp::RollingFileAppender    // 输出到回卷文件,即当文件到达某个大小后回卷log4cpp::OstreamAppender      // 输出到一个ostream类log4cpp::RemoteSyslogAppender   // 输出到远程syslog服务器log4cpp::StringQueueAppender   // 内存队列log4cpp::SyslogAppender      // 本地sysloglog4cpp::Win32DebugAppender    // 发送到缺省系统调试器log4cpp::NTEventLogAppender    // 发送到win 事件日志

     category 类真正完成记录日志功能,两个主要组成部分是appenders和priority(优先级)。优先级控制哪类日志信息可以被这个category记录,当前优先级分为:NOTSET, DEBUG, INFO, NOTICE, WARN, ERROR, CRIT, ALERT 或 FATAL/EMERG 。每个日志信息有个优先级,每个category有个优先级,当消息的优先级大于等于category的优先级时,这个消息才会被category记录,否则被忽略。优先级的关系如下。category类和appender的关系是,多个appender附在category上,这样一个日志消息可以同时输出到多个设备上。

    NOTSET < DEBUG < INFO < NOTICE < WARN < ERROR < CRIT < ALERT < FATAL = EMERG

     category被组织成一个树,子category创建时优先级缺省NOTSET,category缺省会继承父category的appender。而如果不希望这种appender的继承关系,log4cpp允许使用additivity 标签,为false时新的appender取代category的appender列表。

    为了更好的理解上面的概念下面以手动使用方式举例。


    2. 手动使用步骤

    手动使用log4cpp的基本步骤如下:

    1. 实例化一个layout 对象;
    2. 初始化一个appender 对象;
    3. 把layout对象附着在appender对象上;
    4. 调用log4cpp::Category::getInstance("name"). 实例化一个category对象;
    5. 把appender对象附到category上(根据additivity的值取代其他appender或者附加在其他appender后)。
    6. 设置category的优先级;
    // FileName: test_log4cpp1.cpp // Test log4cpp by manual operation. // Announce: use as your own risk. // Compile : g++ -otest1 -llog4cpp test_log4cpp1.cpp // Run     : ./test1 // Tested  : RedHat 7.2 log4cpp0.3.4b // Author  : liqun (liqun@nsfocus.com) // Data    : 2003-6-27 #include "log4cpp/Category.hh" #include "log4cpp/FileAppender.hh" #include "log4cpp/BasicLayout.hh" int main(int argc, char* argv[]) // 1实例化一个layout 对象          log4cpp::Layout* layout = new log4cpp::BasicLayout();          // 2. 初始化一个appender 对象   log4cpp::Appender* appender = new log4cpp::FileAppender("FileAppender", "./test_log4cpp1.log");   // 3. 把layout对象附着在appender对象上   appender->setLayout(layout);   // 4. 实例化一个category对象   log4cpp::Category& warn_log = log4cpp::Category::getInstance("mywarn");   // 5. 设置additivity为false,替换已有的appender          warn_log.setAdditivity(false);   // 5. 把appender对象附到category上   warn_log.setAppender(appender);   // 6. 设置category的优先级,低于此优先级的日志不被记录   warn_log.setPriority(log4cpp::Priority::WARN);   // 记录一些日志   warn_log.info("Program info which cannot be wirten");   warn_log.debug("This debug message will fail to write");   warn_log.alert("Alert info");   // 其他记录日志方式   warn_log.log(log4cpp::Priority::WARN, "This will be a logged warning");   log4cpp::Priority::PriorityLevel priority;   bool this_is_critical = true;   if(this_is_critical)     priority = log4cpp::Priority::CRIT;   else     priority = log4cpp::Priority::DEBUG;   warn_log.log(priority,"Importance depends on context");     warn_log.critStream() << "This will show up << as "   << 1 << " critical message"   << log4cpp::CategoryStream::ENDLINE;   // clean up and flush all appenders  log4cpp::Category::shutdown();   return 0; } 

    3. 配置文件驱动方式使用步骤

     另一个非常优秀的特征就是通过读取配置文件,确定category、appender、layout等对象。也是我们非常推荐的使用方式,可以灵活地通过配置文件定义所有地对象及其属性,不用重新编码,动态更改日志记录的策略。

     Log4cpp主要提供了 log4cpp::PropertyConfigurator 和log4cpp::SimpleConfigurator两种机制(文件格式),但 log4cpp::SimpleConfigurator将来不再支持了,而且格式非常简单,这里就不多说明,自己看源码吧。

     配置文件的格式和log4j的配置文件一样,是标准的java属性文件格式。下面是附带的例子配置文件:

    # a simple test config #定义了3个category sub1, sub2, sub1.sub2 log4j.rootCategory=DEBUG, rootAppender log4j.category.sub1=,A1 log4j.category.sub2=INFO log4j.category.sub1.sub2=ERROR, A2 # 设置sub1.sub2 的additivity属性 log4j.additivity.sub1.sub2=false #定义rootAppender类型和layout属性 log4j.appender.rootAppender=org.apache.log4j.ConsoleAppender log4j.appender.rootAppender.layout=org.apache.log4j.BasicLayout #定义A1的属性 log4j.appender.A1=org.apache.log4j.FileAppender log4j.appender.A1.fileName=A1.log log4j.appender.A1.layout=org.apache.log4j.SimpleLayout #定义A2的属性 log4j.appender.A2=org.apache.log4j.ConsoleAppender log4j.appender.A2.layout=org.apache.log4j.PatternLayout log4j.appender.A2.layout.ConversionPattern=The message '%m' at time %d%n  

    配置文件语法如下,不是很规范,结合上面的例子,应该可以看懂。

    log4j / log4cpp . [category / appender].[category or appender 's name].   [category or appender 's property]  = [Appender / Layout / property's value / Priority, appender name1 [appender name2 ...]]   [appender]     {ConsoleAppender}     {FileAppender}  // 当appender的类型是FileAppender时,可以定义它下面的属性。       [fileName]  string  foobar  // 格式是:属性名 值的类型 缺省值       [append]  bool  true     {RollingFileAppender}       [fileName]   string  foobar       [maxFileSize]  num  10*1024*1024       [maxBackupIndex]  num  1       [append]  bool  true     {SyslogAppender}       [syslogName]  string  syslog       [syslogHost]  string  localhost       [facility]  num  -1  // * 8 to get LOG_KERN, etc. compatible values.        [portNumber]  num  -1     {IdsaAppender}       [idsaName]  string  foobar     {Win32DebugAppender}     {NTEventLogAppender}       [source]  string  foobar              [threshold]  string ""  // 全部        // 如果此类型appender需要layout,必须定义此appender的下面属性       [layout]         {BasicLayout}           {SimpleLayout}         {PatternLayout}             // 当layout的值是BasicLayout时,需要定义下面的属性。           [ConversionPattern]              [rootCategory]   [additivity]     [category name]  bool  true   

    基本使用步骤是:

    1. 读取解析配置文件;
    2. 实例化category对象;
    3. 正常使用这些category对象进行日志处理;

    下面是个简单的使用代码,使用起来是非常方便的:

    // FileName: test_log4cpp2.cpp // Test log4cpp by config file. // Announce: use as your own risk. // Compile : g++ -llog4cpp test_log4cpp2.cpp // Run     : ./a.out // Tested  : RedHat 7.2 log4cpp0.3.4b // Author  : liqun (liqun@nsfocus.com) // Data    : 2003-6-27 #include "log4cpp/Category.hh" #include "log4cpp/PropertyConfigurator.hh" int main(int argc, char* argv[]) {   // 1 读取解析配置文件   // 读取出错, 完全可以忽略,可以定义一个缺省策略或者使用系统缺省策略   // BasicLayout输出所有优先级日志到ConsoleAppender      try  {  log4cpp::PropertyConfigurator::configure("./log4cpp.conf");   }  catch(log4cpp::ConfigureFailure& f)  {    std::cout << "Configure Problem " << f.what() << std::endl;         return -1;      }     // 2 实例化category对象   // 这些对象即使配置文件没有定义也可以使用,不过其属性继承其父category   // 通常使用引用可能不太方便,可以使用指针,以后做指针使用   // log4cpp::Category* root = &log4cpp::Category::getRoot();      log4cpp::Category& root = log4cpp::Category::getRoot();        log4cpp::Category& sub1 = log4cpp::Category::getInstance(std::string("sub1"));      log4cpp::Category& sub3 = log4cpp::Category::getInstance(std::string("sub1.sub2"));   // 3 正常使用这些category对象进行日志处理。   // sub1 has appender A1 and rootappender.   sub1.info("This is some info");   sub1.alert("A warning");     // sub3 only have A2 appender.   sub3.debug("This debug message will fail to write");   sub3.alert("All hands abandon ship");   sub3.critStream() << "This will show up << as " << 1 << " critical message" << log4cpp::CategoryStream::ENDLINE;   sub3 << log4cpp::Priority::ERROR << "And this will be an error" << log4cpp::CategoryStream::ENDLINE;   sub3.log(log4cpp::Priority::WARN, "This will be a logged warning");     return 0; } 

    4. 相关考虑

     性能问题,可能是很多想使用log4cpp的程序员关心的问题。在参考资料2中有一段描述。结论就是log4j以及log4cpp是以性能为首要目标的;如果关闭日志记录的话,对性能影响可以忽略;打开日志记录,主要消耗是在记录动作,而不是库的管理过程;所以你尽可放心的使用。实在要深究性能的话。可以从下面方面提高:

    输出的日志消息不要使用复杂的转换或者处理,比如: sub1.debug(string("Current num is") + i + GetCurStat()); 这种情况即使不进行日志处理,括号中的语句还是会执行。变通方法是:

    if(sub1.isDebugEnabled()) {  sub1.debug(string("Current num is") + i + GetCurStat()); } 

     安全性问题对于商业软件开发可能也是问题。可能不希望别人通过修改配置文件获取程序的调试等程序内部运行情况的日志信息。比较稳妥的方案或者是加密配置文件,运行中解密,输出到临时文件后读取;或者在发行版本里读取配置文件后,强行把低于某个优先级的category设到比较高的优先级。

     多线程安全性问题。当前log4cpp还没有宣称自己是多线程安全的,不过其代码中大多数可能冲突的地方都增加了线程互斥控制,对多线程环境应该问题不大。但为了加入这个特性,linux下编译log4cpp时,configure请加入--with-pthreads 或者--with-omnithreads选项。Win版本已经加入对MS线程的支持。

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • log4Cpp

    1、log4Cpp构成要素简介

    1、Layouts :布局器,控制输出消息的格式。
    2、Appenders :挂接器,与布局器紧密配合,将特定格式的消息输出到所挂接的设备终端(如屏幕,文件等等)。
    3、Logger : 记录器,保存并跟踪对象日志信息变更的实体,当你需要对一个对象进行记录时,就需要生成一个 logger。
    4、Categories :分类器,层次化(hierarchy)的结构,用于对被记录信息的分类,层次中每一个节点维护一个 logger 的所有信息。
    5、Priorities :优先权,包括 TRACE, DEBUG, INFO, WARNING, ERROR, FATAL。
    

    2、基本的使用步骤

    1. 实例化一个 appender 对象。
    2. 实例化一个 layout 对象。
    3. 将 layout 对象绑定(attach)到 appender 对象。
    4. 实例化一个 logger 对象,调用静态函数:log4cplus::Logger::getInstance(“logger_name”)。
    5. 将 appender 对象绑定(attach)到 logger 对象,如省略此步骤,标准输出(屏幕)appender 对象会
      绑定到 logger。
    6. 设置 logger 的优先级,如省略此步骤,各种有限级的消息都将被记录。
      注意,调用静态函数 getInstance 这里使用的单例模式,为什么要使用单例模式呢?很简单,对于日志系统来说,每一个系统只有一个!

    3、要素中的基本元素

    这里写图片描述
    从上图中可以了解要素中的基本元素!
    1、SimpleLayout 是一种简单格式的布局器,在输出的原始信息之前加上 LogLevel 和一个”-“。
    2、PatternLayout是一种有词法分析功能的模式布局器,一提起模式就会想起正则表达式,这里的模式和正则表达式类
    似,但是远比后者简单,能够对预定义的标识符(称为 conversion specifiers)进行解析,转换成特定格
    式输出。
    3、TTCCLayout 是在 PatternLayout 基础上发展的一种缺省的带格式输出的布局器, 其格式由时间,线程 ID,Logger 和 NDC 组成(consists of time, thread, Logger and nested diagnostic context information, hencethe name),因而得名。提供给那些想显示典型的信息(一般情况下够用了)又懒得配置 pattern 的同志们。

    log4cplus 在将 log 信息记录到文件的基础上,提供了更多的功能,可以按照你预先设定的大小来决定是否转储,当超过该大小,后续 log 信息会另存到新文件中,依次类推;或者按照日期来决定是否转储。log4cplus 提 供 了 三 个 类 用 于 文 件 操 作 , 它 们 是 FileAppender 类 、 RollingFileAppender 类 、DailyRollingFileAppender 类。

    4、日志优先级控制

    log4cplus 将输出的 log 信息按照 LogLevel(从低到高)分为:
    NOT_SET_LOG_LEVEL ( -1) :接受缺省的 LogLevel,如果有父 logger 则继承它的 LogLevel;
    ALL_LOG_LEVEL ( 0) :开放所有 log 信息输出;
    TRACE_LOG_LEVEL ( 0) :开放 trace 信息输出(即 ALL_LOG_LEVEL);
    DEBUG_LOG_LEVEL (10000) :开放 debug 信息输出;
    INFO_LOG_LEVEL (20000) :开放 info 信息输出;
    WARN_LOG_LEVEL (30000) :开放 warning 信息输出;
    ERROR_LOG_LEVEL (40000) :开放 error 信息输出;
    FATAL_LOG_LEVEL (50000) :开放 fatal 信息输出;
    OFF_LOG_LEVEL (60000) : 关闭所有 log 信息输出。
    可以通过 logger_name.setLogLevel(LogLevel)来设置日志输出的优先级。

    展开全文
  • log4cpp-master.zip

    2021-08-23 15:41:54
    log4cpp-master源码,需要使用log4Cpp的同学可以自行取用
  • C++使用Log4cpp

    2018-12-19 16:24:45
    C++使用Log4cpp记录日志,包括说明文档及相关关键代码、包括log4cpp-1.1.2.tar.gz。
  • log4cpp指导手册.pdf

    2021-03-04 10:47:22
    log4cpp指导手册.pdf
  • 学习log4cpp(一)
  • log4cpp日志库

    2019-05-07 17:31:31
    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,能够非常便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Windows日志、本地syslog和...
  • C++ Log4Cpp 使用

    2020-06-03 09:48:35
    log4cpp当前提供以下appender: log4cpp::IdsaAppender // 发送到IDS或者logger, 详细见 http://jade.cs.uct.ac.za/idsa/ log4cpp::FileAppender // 输出到文件 log4cpp::RollingFileAppender // 输出到回卷文件...
  • Log4cpp使用档案

    2017-11-06 17:39:57
    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。网上也已经有了各种各样“教材”,但都太零碎。 本文详细的介绍了Log4cpp的各种用法,包括编译、应用、配置。同时,作者提供了自己的...
  • log4cpp_helper

    2017-10-27 17:22:36
    log4cpp的简单封装,可以很容易的集成到自己的项目中,注意我使用的是MTD。我只实现了INFO DEBUG ERROR,其他可以自己实现。宏嵌套可能会有一些问题,尽量不要把这几个宏再嵌套到别的宏中。使用的是静态库,注意官网...
  • log4cpp源码完整解析

    2016-05-16 21:51:13
    完整分析了log4cpp的整体架构,详细介绍了log4cpp的这个重要组件的实现分析了log4cpp内部所使用的设计模式。介绍了log4cpp中的Category的完整实现细节,介绍了所有的Layout及其子类的具体实现。也详细介绍了比较常用...
  • 增强版Log4cpp

    2017-11-06 17:29:11
    Log4cpp 修改版,基于Log4cpp-1.1.3 1、新增Microsoft Visual Studio 2008的解决方案,并修正几处兼容性问题。 2、新增Microsoft Visual Studio 2017的解决方案,并修正几处兼容性问题。 3、新增Microsoft Visual...
  • log4cpp源码

    热门讨论 2012-12-11 17:03:16
    log4cpp的源码,觉得比较实用,可以供学习C++ STL参考手册
  • log4cpp C++开源log

    2011-01-10 06:48:38
    log log4cpp vc vclog c++log
  • 开源C++类库log4cpp

    2017-10-14 18:55:08
    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Windows日志、本地syslog和...
  • log4cpp源代码

    2014-07-20 17:55:53
    log4cpp的源代码。log4cpp是用C++语言编写的日志工具,借鉴了log4j的思想,可以自由配置日志的输出格式、输出文件等,是一个很方便的程序调试、运行追踪工具。
  • log4cpp 封装

    千次阅读 2015-06-18 13:00:27
    最近学习log4cpp,试着封装了下,mark下。#include #include<log4cpp/Category.hh>#include<log4cpp/Appender.hh> #include<log4cpp/FileAppender.hh> #include<log4cpp/RollingFileAppender.hh> #include<log4cpp/...
  • log4cpp Android NDK 开发

    2016-03-09 19:19:16
    Android NDK开发 log4cpp
  • log4cpp的简单介绍

    2018-04-08 20:55:27
    附件包含log4cpp相关介绍,用法以及简单实例。供开发人员使用。 可以实现log信息自定义、定制化输出等
  • mfc使用log4cpp实例

    2017-01-22 00:27:55
    c++使用log4cpp记录软件日志的动态库及实例
  • log4cpp-lib.rar

    2019-06-24 16:16:05
    log4cpp静态库和头文件,使用vc2017编译的,包含debug和release版本,64位编译。
  • Log4Cpp使用实例

    2017-02-20 18:27:01
    自己编译好的log4cpp的DLL 和 LIB 封装了一个使用类,从本地读取配置log级别等信息,可输出多个种类的日志文件,输出示例如下 [2017-02-20 16:09:51.910](NOTICE)Sys : 进入了CPfy_log4cppDlg::OnBnClickedButton1...
  • 日志log4cpp-1.1.3.zip

    2020-07-03 11:13:04
    Log4cpp是个基于LGPL的开源项目,移植自Java的日志处理跟踪项目log4j,并保持了API上的一致。其类似的支持库还包括Java(log4j),C++(log4cpplog4cplus),C(log4c),python(log4p)等。
  • log4cpp浅析

    2021-04-12 09:38:23
    其类似的支持库还包括Java(log4j),C++(log4cpplog4cplus),C(log4c),python(log4p)等。 Log4cpp中最重要概念有Category(种类)、Appender(附加器)、Layout(布局)、Priorty(优先级)、NDC(嵌套的诊断上...
  • log4cpp android ndk
  • log4cpp.lib

    2020-05-28 18:12:50
    编译log4cpp,生成的lib库,已测试可以正常使用。改版本仅支持windows x64-release使用,如需要其它版本,请自行对源码进行编译。
  • log4cpp.dll

    2020-05-28 18:14:48
    编译log4cpp后,生成的dll库,经测试,可以正常运行。该版本仅支持Windows平台 x64-release版本,如需其它版本,请自行编译源码。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,632
精华内容 35,052
关键字:

log4cpp