开源日志系统 log4cplus
Linux下log4cplus日志工具怎样进行配置

Linux下log4cplus日志工具怎样进行配置Linux下log4cplus日志工具怎样进行配置log4cplus是一款优秀的基于C/C++的开源日志库,那么大家知道Linux下log4cplus日志工具怎样进行配置吗?下面店铺就为大家带来了Linux下配置log4cplus日志工具的方法。
Linux下log4cplus日志工具配置方法1、log4cplus简介log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统.受Apache Software License保护。
作者是Tad E. Smith。
log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期; 你可以选择将信息输出到屏幕、文件、NT event log、甚至是远程服务器;通过指定策略对日志进行定期备份。
2、log4cplus下载最新的log4cplus可以从以下网址下载。
log4cplus:/projects/log4cplus/在RedHat Linux系统下可使用以下命令安装:wget/projects/log4cplus/files/log4cplus-stable/1.1.2/log4cplus-x.x.x.tar.gz3、log4cplus安装tar xvzf log4cplus-x.x.x.tar.gzcd log4cplus-x.x.x./configuremakemake install4、log4cplus配置log4cplus默认安装后头文件路径是/usr/local/include/log4cplus,库文件的安装文件路劲是/usr/local/lib,编辑.bash_profile文件添加库文件。
$ vi ~/.bash_profile添加:LD_LIBRARY_PATH=LD_LIBRARY_PATH:/usr/local/libexport LD_LIBRARY_PATH添加完后source ~/.bash_profile使改变生效$ vi /etc/profile添加:CPLUS_INCLUDE_PATH=LD_LIBRARY_PATH:/usr/local/lib export CPLUS_INCLUDE_PATH添加完后source ~/.bash_profile使改变生效5、测试#include#include#include#include#include#include#include#include#includeusing namespace std;using namespace log4cplus;Logger pTestLogger;void writelog(char* leval,char* info){struct tm *p;time_t lt=time(NULL);p=localtime(<);char* timetemp=ctime(<);*(timetemp+strlen(timetemp)-1)='\0';char temp[10000];sprintf(temp,"[%s] %s",timetemp,info);printf("temp==%s",temp);printf("leval====%s\n",leval);if(memcmp(leval,"TRACE",5)==0)printf("%d===%d",memcmp("TRACE","TRAC1E",5),memcm p(leval,"TRACE",5));LOG4CPLUS_TRACE(pTestLogger,temp);if(memcmp(leval,"DEBUG",5)==0)LOG4CPLUS_DEBUG(pTestLogger,temp);if(memcmp(leval,"INFO",4)==0)LOG4CPLUS_INFO(pTestLogger,temp);if(memcmp(leval,"WARN",4)==0)LOG4CPLUS_WARN(pTestLogger,temp);if(memcmp(leval,"ERROR",5)==0)LOG4CPLUS_ERROR(pTestLogger,temp);if(memcmp(leval,"FATAL",5)==0)LOG4CPLUS_FATAL(pTestLogger,temp);}int main(){char* info="you have a iuns";char filename[50];struct tm *p;time_t lt=time(NULL);p=localtime(<);sprintf(filename,"%d-%d-%d.txt",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);FILE* stream=fopen(filename,"wb");SharedAppenderPtr pFileAppender(new FileAppender((filename)));pTestLogger = Logger::getInstance(("LoggerName"));pTestLogger.addAppender(pFileAppender);writelog("TRACE",info);writelog("DEBUG",info);writelog("ERROR",info);return 0;}编译命令g++ filetime.cpp -I /usr/local/log4cplus/include/ -L /usr/local/log4cplus/lib -llog4cplus -o filetime。
Log4cplus使用指南

Log4cplus使用指南广目录1 LOG4CPLUS简介 (5)2 安装方法 (5)3 主要类说明 (6)4 基本使用 (6)4.1基本步骤 (6)4.2使用示例 (7)4.2.1 例1-标准使用 (7)4.2.2 例2-简洁使用 (8)4.2.3 例3-输出日志到控制台 (9)4.2.4 例4-输出日志到文件 (10)4.2.5 例5-使用loglog输出日志 (11)4.3日志输出宏 (13)5 输出格式控制 (14)5.1S IMPLE L AYOUT (14)5.2P A TTERN L AYOUT (15)5.2.1转换标识符 (15)5.3TTCCL AYOUT (17)6 输出重定向 (18)6.1重定向到控制台 (18)6.2重定向到文件 (19)6.2.1 FileAppender (19)6.2.2 RollingFileAppender (19)6.2.3 DailyRollingFileAppender (20)6.3重定向到远程服务器 (22)6.3.1 客户端程序需要做的工作 (22)6.3.2 服务器端程序需要做的工作 (22)6.3.3 例6-重定向到远程服务器 (23)6.4嵌入诊断上下文NDC (28)7 输出过滤 (30)7.1利用日志级别进行输出过滤 (30)7.1.1 日志级别管理 (30)7.1.2 利用日志级别进行输出过滤 (31)7.1.3 例7-日志的优先级 (31)7.1.4 例8-运行时利用日志级别进行输出过滤 (34)7.2利用脚本配置进行输出过滤 (37)7.3L OG L OG的输出过滤 (37)8 脚本配置 (37)8.1基本配置 (37)8.1.1根Logger的配置 (37)8.1.2非根Logger的配置 (37)8.2高级配置 (38)8.2.1 Appender配置 (38)8.2.2 Filter配置 (38)8.2.3 Layout配置 (39)8.3.3 例9-脚本配置 (39)8.3脚本配置的动态加载 (42)8.3.1 例10-使用线程监控脚本的更新 (42)9 定制LOG4CPLUS (44)9.1定制日志级别 (44)9.2定制L OG L OG (47)1 Log4cplus简介log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统,受Apache Software License保护,作者是Tad E. Smith。
log4日志的初始化流程

log4日志的初始化流程(最新版)目录1.log4 日志的概述2.log4 日志的初始化流程3.log4 日志的应用示例正文一、log4 日志的概述log4 是一款优秀的 Java 日志框架,其设计目标是为了提供简单易用、功能强大的日志记录功能。
相较于其他日志框架,log4 具有如下特点:1.提供了丰富的日志级别,如 DEBUG、INFO、WARN、ERROR 等,方便开发者根据需要选择合适的日志级别。
2.支持多种日志输出方式,如控制台输出、文件输出、远程输出等,满足不同场景的需求。
3.提供了灵活的配置方式,可以通过 XML 配置文件或注解进行配置。
二、log4 日志的初始化流程log4 的初始化流程主要分为以下几个步骤:1.加载配置文件:log4 首先会加载用户指定的配置文件(可以是 XML 文件或注解)。
如果配置文件不存在或无法加载,log4 会使用默认的配置。
2.解析配置文件:log4 会对配置文件进行解析,将配置信息转化为内部的数据结构。
如果配置文件有错误,log4 会抛出异常。
3.初始化 Appender:根据配置文件中的信息,log4 会创建对应的Appender 实例。
Appender 是 log4 中负责实际输出日志的组件,如控制台输出、文件输出等。
4.初始化 Logger:log4 会根据配置文件中的信息创建 Logger 实例。
Logger 是 log4 中负责记录日志的组件,它会将日志信息按照日志级别进行处理。
5.设置日志级别:log4 会根据配置文件中的信息设置 Logger 的日志级别。
如果配置文件中没有指定日志级别,log4 会使用默认的日志级别。
6.输出日志信息:当应用程序运行时,log4 会根据 Logger 的日志级别输出相应的日志信息。
三、log4 日志的应用示例以下是一个简单的 log4 应用示例:1.首先,需要在项目中引入 log4 的依赖。
互联网开源日志系统介绍和对比剖析

开源日志系统比较1. 背景介绍许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:(1)构建应用系统和分析系统的桥梁,并将它们之间的关联解耦;(2)支持近实时的在线分析系统和类似于Hadoop之类的离线分析系统;(3)具有高可扩展性。
即:当数据量增加时,可以通过增加节点进行水平扩展。
本文从设计架构,负载均衡,可扩展性和容错性等方面对比了当今开源的日志系统,包括facebook的scribe,apache的chukwa,linkedin的kafka和cloudera的flume等。
2. FaceBook的ScribeScribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用。
它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。
它为日志的“分布式收集,统一处理”提供了一个可扩展的,高容错的方案。
它最重要的特点是容错性好。
当后端的存储系统crash时,scribe会将数据写到本地磁盘上,当存储系统恢复正常后,scribe将日志重新加载到存储系统中。
架构:scribe的架构比较简单,主要包括三部分,分别为scribe agent,scribe和存储系统。
(1) scribe agentscribe agent实际上是一个thrift client。
向scribe发送数据的唯一方法是使用thrift client,scribe内部定义了一个thrift接口,用户使用该接口将数据发送给server。
(2) scribescribe接收到thrift client发送过来的数据,根据配置文件,将不同topic的数据发送给不同的对象。
scribe 提供了各种各样的store,如file,HDFS等,scribe可将数据加载到这些store中。
Apache log4cxx在C++多进程多线程下的使用

Apache log4cxx在C++多进程多线程下的使用1、Apache log4cxx介绍Apache log4cxx是Apache Logging Services三个日志记录项目之一,完全开源组件。
是著名的日志记录组件log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。
当前的最新版本为0.10.0。
2、Apache log4cxx 框架组成Apache Log4cxx有三个关键组件,它们是loggers, appenders和layouts。
执行日志操作Logger是log4cxx的核心类。
looger有层次结构,最顶层为RootLogger;logger是分七个级别,分别是debug、info、warn、error、fatal、all、off,最常用的应该是debug()和info();而warn()、error()、fatal()仅在相应事件发生后才使用。
每个logger可以附加多个Appender。
Appender代表了日志输出的目标,如输出到文件、控制台,数据库等等。
对于每一种appender,都可以通过layout进行格式设置,根据自己需求定制不同日志内容。
使用中用到的类有BasicConfigurator、PropertyConfigurator、DOMConfigurator等,用于对log4cxx进行配置。
其中BasicConfigurator提供了一种简单配置,包括使用ConsoleAppder作为root appender和PatternLayout 作为缺省布局,PropertyConfigurator使用properties文件作为配置方式,DOMConfigurator则使用properties文件作为配置方式,具体配置文档信息请查阅相关资料。
3、多进程多线程使用设计Apache Log4cxx 提供的常用供日志调用方法,logger->info(),logger->debug(),logger->warn(),logger->error(),与上述方法类似的还有相应的宏调用LOG4CXX_DEBUG()、LOG4CXX_INFO()、LOG4CXX_WARN()、LOG4CXX_ERROR()。
Log4cplus日志系统和产一Willow基础库日志模块源代码分析

日志系统之Log4cplusLog4cplus日志系统和产一Willow基础库日志模块源代码分析2007-8-27目录目录 (1)一、LOG4CPLUS (3)1 安全指针 (3)1.1 SAFE_AUTO_PTR (3)1.2S HARED O BJECT和S HARED O BJECT P TR (4)2 UNICODE支持 (7)3 APPENDER、LAYOUT和FILTER的创建及注册 (9)3.1工厂类的体系结构 (9)3.2工厂对象的注册 (10)4 多线程的支持 (12)5 内部日志LOGLOG (14)6 过滤器链表 (18)7 总体结构 (19)二、WILLOW基础库 (20)1 内部日志LOGLOG (20)2 XDBC中的XLOG (22)3 SIMPLELOG (22)日志系统之Log4cplus一、Log4cplus1 安全指针1.1 safe_auto_ptr标准模板库的auto_ptr只是简单起到资源申请即初始化的作用, 但是atuto_ptr模板的所有方法使用了throw()异常声明将所有可能的异常都隐藏起来了, 模板类safe_auto_ptr通过包装auto_ptr使得可能的空指针异常抛掷出来。
主要通过重载*和->运算符,在实现中检查指针是否为空实现。
template<class T>class LOG4CPLUS_EXPORT safe_auto_ptr {public:// Ctorsexplicit safe_auto_ptr(T* val = 0) : value(val){}safe_auto_ptr(const safe_auto_ptr& rhs): value(const_cast<safe_auto_ptr&>(rhs).value){}// Note: No Dtor needed since value is an auto_ptr// operatorssafe_auto_ptr& operator=(safe_auto_ptr& rhs) {value = rhs.value; return *this;}T& operator*() const { validate(); return *value; }T* operator->() const { validate(); return value.operator->(); }// methodsT* get() const { return value.get(); }T* release() { return value.release(); }void reset(T* val = 0) { value.reset(val); }void validate(const char* file, int line) const {if(value.get() == 0) {throwNullPointerException(file, line);}1.2 SharedObject和SharedObjectPtrSharedObject是模拟标准模板库auto_ptr的一种实现,通过引用计数来进行实例的共享。
log4cplus库的properties文件配置

log4cplus库的properties⽂件配置 使⽤时需要先获取⼀个Logger的对象,下⾯获取Logger对象的内容对应于配置;Logger LogConsole = Logger::getInstance(LOG4CPLUS_TEXT("console"));Logger LogRoot = Logger::getInstance(LOG4CPLUS_TEXT("root")); log4cplus常⽤配置如下:#配置⽂件(其它⽇志级别配置相同):log4cplus.logger.console=TRACE,logConsolelog4cplus.logger.root=TRACE,ERROR_MSGS, DEBUG_MSGS, INFO_MSGS#不向默认对象(rootLogger)输出,因此信息只能输出到⽂件log4cplus.additivity.file=false###############################CONSOLE##########################################log4cplus.appender.logConsole=log4cplus::ConsoleAppenderlog4cplus.appender.logConsole.Encoding=utf-8yout=log4cplus::PatternLayoutyout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %-5p %m %n################################DEBUG#####################################设置⽇志追加到⽂件尾log4cplus.appender.DEBUG_MSGS=log4cplus::TimeBasedRollingFileAppenderlog4cplus.appender.DEBUG_MSGS.FilenamePattern=debug.%d{yyyyMMdd}.loglog4cplus.appender.ERROR_MSGS.Schedule=DAILYlog4cplus.appender.ERROR_MSGS.MaxHistory=365log4cplus.appender.DEBUG_MSGS.Append=truelog4cplus.appender.DEBUG_MSGS.RollOnClose=falselog4cplus.appender.DEBUG_MSGS.CreateDirs=true#设置⽇志⽂件⼤⼩log4cplus.appender.DEBUG_MSGS.MaxFileSize=10MB#设置⽣成⽇志最⼤个数log4cplus.appender.DEBUG_MSGS.MaxBackupIndex=5log4cplus.appender.DEBUG_MSGS.Encoding=utf-8log4cplus.appender.DEBUG_yout=log4cplus::PatternLayout#设置⽇志打印格式log4cplus.appender.DEBUG_yout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %-5p %m %n#匹配相同⽇志级别,只有wx_uservedio⽇志才输⼊到该⽂件中log4cplus.appender.DEBUG_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilterlog4cplus.appender.DEBUG_MSGS.filters.1.LogLevelToMatch=DEBUGlog4cplus.appender.DEBUG_MSGS.filters.1.AcceptOnMatch=truelog4cplus.appender.DEBUG_MSGS.filters.2=log4cplus::spi::DenyAllFilter################################ERROR#####################################设置⽇志追加到⽂件尾log4cplus.appender.ERROR_MSGS=log4cplus::TimeBasedRollingFileAppenderlog4cplus.appender.ERROR_MSGS.FilenamePattern=error.%d{yyyyMMdd}.loglog4cplus.appender.ERROR_MSGS.Schedule=DAILYlog4cplus.appender.ERROR_MSGS.MaxHistory=365log4cplus.appender.ERROR_MSGS.Append=truelog4cplus.appender.ERROR_MSGS.RollOnClose=falselog4cplus.appender.ERROR_MSGS.CreateDirs=true#设置⽇志⽂件⼤⼩log4cplus.appender.ERROR_MSGS.MaxFileSize=10MB#设置⽣成⽇志最⼤个数log4cplus.appender.ERROR_MSGS.MaxBackupIndex=5log4cplus.appender.ERROR_MSGS.Encoding=utf-8log4cplus.appender.ERROR_yout=log4cplus::PatternLayout#设置⽇志打印格式log4cplus.appender.ERROR_yout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %-5p %m%n#匹配相同⽇志级别,只有wx_uservedio⽇志才输⼊到该⽂件中log4cplus.appender.ERROR_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilterlog4cplus.appender.ERROR_MSGS.filters.1.LogLevelToMatch=ERRORlog4cplus.appender.ERROR_MSGS.filters.1.AcceptOnMatch=truelog4cplus.appender.ERROR_MSGS.filters.2=log4cplus::spi::DenyAllFilter################################INFO#####################################设置⽇志追加到⽂件尾_MSGS=log4cplus::TimeBasedRollingFileAppender_MSGS.FilenamePattern=info.%d{yyyyMMdd}.log_MSGS.Schedule=DAILY_MSGS.MaxHistory=365_MSGS.Append=true_MSGS.RollOnClose=false_MSGS.CreateDirs=true#设置⽇志⽂件⼤⼩_MSGS.MaxFileSize=10MB#设置⽣成⽇志最⼤个数_MSGS.MaxBackupIndex=5_MSGS.Encoding=utf-8_yout=log4cplus::PatternLayout#设置⽇志打印格式_yout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %-5p %m %n #匹配相同⽇志级别,只有INFO⽇志才输⼊到该⽂件中_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilter_MSGS.filters.1.LogLevelToMatch=INFO_MSGS.filters.1.AcceptOnMatch=true_MSGS.filters.2=log4cplus::spi::DenyAllFilter。
log4cplus 说明

Log4cplus 概述首先,log4cplus是一个日志记录的库,目的很简单,就是把合适的信息送到正确的位置上去。
Log4cplus 由4部分组成:1>Logger 日志模块,程序中唯一一个必须得使用的模块,解决了在哪里使用日志的问题2> Appenders 接收日志的各个设备,如控制台、文件、网络等。
解决了输出到哪里去的问题3>Layout 格式化输出信息,解决了如何输出的问题。
4>Filter 过滤器,解决哪些信息需要输出的问题,比如DEBUG,WARR,INFO等的输出控制.Log4cplus的主要部件关系图如下:Log4cplus格式化输出字符串来源:/docs/html/classlog4cplus_1_1PatternLayout.html/tx7do/articles/11717.html关于预定义标识符,log4cplus文档中提供了详细的格式说明,我每种都试了一下,以上述代码为例,根据不同的pattern,各种消息格式使用情况列举如下:(1)"%%",转义为%, 即,std::string pattern = "%%" 时输出: "%"(2)"%c",输出logger名称,比如std::string pattern ="%c" 时输出: "test_logger.subtest",也可以控制logger名称的显示层次,比如"%c{1}"时输出"test_logger",其中数字表示层次。
(3)"%D",显示本地时间,当std::string pattern ="%D" 时输出:"2004-10-16 18:55:45",%d显示标准时间,所以当std::string pattern ="%d" 时输出 "2004-10-16 10:55:45" (因为我们是东8区,差8个小时啊)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开源日志系统 log4cpluslog4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工程中会比较专业的,:),本文介绍了log4cplus基本 概念,以及如何安装,配置。
### 简介 ###log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统.受Apache Software License保护。
作者是Tad E. Smith。
log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期; 你可以选择将信息输出到屏幕、文件、NT event log、甚至是远程服务器;通过指定策略对日志进行定期备份等等。
### 下载 ###最新的log4cplus可以从以下网址下载 本文使用的版本为:1.0.2### 安装 ###1. linux下安装tar xvzf log4cplus-x.x.x.tar.gzcd log4cplus-x.x.x./configure --prefix=/where/to/installmakemake install这里我采用缺省安装路径:/usr/local,下文如无特别说明,均以此路径为准。
2. windows下安装不需要安装,有一个msvc6存放包括源代码和用例在内的开发工程(for VC6 only),使用之前请先编译"log4cplus_dll class"工程生成dll,或者编译"log4cplus_static class"工程生成lib.### 使用前的配置 ###1. linux下的配置确保你的Makefile中包含 /usr/local/lib/liblog4cplus.a(静态库)或 -llog4cplus(动态库)即可,头文件在/usr/local/include/log4cplus目录下。
对于动态库,要想正常使用,还得将库安装路径加入到LD_LIBRARY_PATH 中,我一般是这样做的:以管理员身份登录,在/etc/ld.so.conf中加入安装路径,这里是/usr/local/lib,然后执行ldconfig使设置生效即可。
2. windows下的配置将"log4cplus_dll class"工程或"log4cplus_static class"工程的dsp 文件插入到你的工程中,或者直接把两个工程编译生成的库以及头文件所在目录放到你的工程的搜索路径中,如果你使用静态库,请在你的工程中"project/setting/C++"的preprocessor definitions中加入LOG4CPLUS_STATIC。
### 构成要素介绍 ###虽然功能强大,应该说log4cplus用起来还是比较复杂的,为了更好地使用它,先介绍一下它的基本要素。
Layouts :布局器,控制输出消息的格式.Appenders :挂接器,与布局器紧密配合,将特定格式的消息输出到所挂接的设备终端(如屏幕,文件等等)。
Logger :记录器,保存并跟踪对象日志信息变更的实体,当你需要对一个对象进行记录时,就需要生成一个logger。
Categories :分类器,层次化(hierarchy)的结构,用于对被记录信息的分类,层次中每一个节点维护一个logger的所有信息。
Priorities :优先权,包括TRACE, DEBUG, INFO, WARNING, ERROR, FATAL。
本文介绍了log4cplus基本概念,以及如何安装,配置,下一篇将通过例子介绍如何使用log4cplus。
### 基本使用 ###使用log4cplus有六个基本步骤:1. 实例化一个appender对象2. 实例化一个layout对象3. 将layout对象绑定(attach)到appender对象4. 实例化一个logger对象,调用静态函数:log4cplus::Logger::getInstance("logger_name")5. 将appender对象绑定(attach)到logger对象,如省略此步骤,标准输出(屏幕)appender对象会绑定到logger6. 设置logger的优先级,如省略此步骤,各种有限级的消息都将被记录下面通过一些例子来了解log4cplus的基本使用。
〖例1〗/* 严格实现步骤1-6,appender输出到屏幕, 其中的布局格式和LogLevel后面会详细解释。
*/#include <log4cplus/logger.h>#include <log4cplus/consoleappender.h>#include <log4cplus/layout.h>using namespace log4cplus;using namespace log4cplus::helpers;int main(){/* step 1: Instantiate an appender object */SharedObjectPtr _append (new ConsoleAppender());_append->setName("append for test");/* step 2: Instantiate a layout object */std::string pattern = "%d{%m/%d/%y %H:%M:%S} - %m [%l]%n";std::auto_ptr _layout(new PatternLayout(pattern));/* step 3: Attach the layout object to the appender */_append->setLayout( _layout );/* step 4: Instantiate a logger object */Logger _logger = Logger::getInstance("test");/* step 5: Attach the appender object to the logger */_logger.addAppender(_append);/* step 6: Set a priority for the logger */_logger.setLogLevel(ALL_LOG_LEVEL);/* log activity */LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message")sleep(1);LOG4CPLUS_WARN(_logger, "This is the SECOND log message")return 0;}输出结果:10/14/04 09:06:24 - This is the FIRST log message... [main.cpp:31] 10/14/04 09:06:25 - This is the SECOND log message... [main.cpp:33]〖例2〗/* 简洁使用模式,appender输出到屏幕。
*/#include <log4cplus/logger.h>#include <log4cplus/consoleappender.h>using namespace log4cplus;using namespace log4cplus::helpers;int main(){/* step 1: Instantiate an appender object */SharedAppenderPtr _append(new ConsoleAppender());_append->setName("append test");/* step 4: Instantiate a logger object */Logger _logger = Logger::getInstance("test");/* step 5: Attach the appender object to the logger */_logger.addAppender(_append);/* log activity */LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message")sleep(1);LOG4CPLUS_WARN(_logger, "This is the SECOND log message")return 0;}输出结果:DEBUG - This is the FIRST log message...WARN - This is the SECOND log message...〖例3〗/* iostream模式,appender输出到屏幕。
*/#include <log4cplus/logger.h>#include <log4cplus/consoleappender.h>#include <iomanip>/* 其实这个东东还是放到log4cplus头文件中比较合适些,个人意见:) */using namespace log4cplus;int main(){/* step 1: Instantiate an appender object */SharedAppenderPtr _append(new ConsoleAppender());_append->setName("append test");/* step 4: Instantiate a logger object */Logger _logger = Logger::getInstance("test");/* step 5: Attach the appender object to the logger */_logger.addAppender(_append);/* log activity */LOG4CPLUS_TRACE(_logger, "This is" << " just a t" << "est." << std::endl) LOG4CPLUS_DEBUG(_logger, "This is a bool: " << true)LOG4CPLUS_INFO(_logger, "This is a char: " << 'x')LOG4CPLUS_WARN(_logger, "This is a int: " << 1000)LOG4CPLUS_ERROR(_logger, "This is a long(hex): " << std::hex << 100000000) LOG4CPLUS_FATAL(_logger, "This is a double: " << std::setprecision(15) << 1.23 45234234)return 0;}输出结果:DEBUG - This is a bool: 1INFO - This is a char: xWARN - This is a int: 1000ERROR - This is a long(hex): 5f5e100FATAL - This is a double: 1.2345234234〖例4〗/* 调试模式,通过loglog来控制输出调试、警告或错误信息,appender输出到屏幕。