Apache开源项目Log4cxx学习

1. 概述

Log4cxx是Apache开源日志项目中的C++版本,Apache的开源日志项目移植于Java社区著名的Log4j,后来经过代码移植,现已有.NET、C++和PHP版本的日志库了。在很多的应用程序中,日志的使用非常的普遍,其官网:http://logging.apache.org/log4cxx/index.html,可以在此处下载Log4cxx的压缩包(apache-log4cxx-0.10.0)。

2. Log4cxx库框架结构

其核心为三个部分:Logger、Appenders和Layouts

Logger部分:日志的等级

Log4cxx中队日志进行了等级划分,在记录信息的时候会根据日志的等级进行记录,主要内如如下:

(1)日志的等级关系和日志的名字有关,以"."号延续为子日志。例如:日志的名字是“log.day”是"Log.day.hour"的父日志,是“Log.day.hour.min”的祖先日志,每个日志都有根日志,他的等级是最高的,且不能通过名字进行访问,只能有API函数:log4cxx::Logger::getRootLogger访问(无参数),而其他的子日志都可以使用API函数通过名字访问:log4cxx::Logger::getLogger。Log4cxx本身预设了日志等级:TRACE < DEBUG < INFO < WARN < FATAL.

(2)通常来说一个日志要预先为其分配等级,其中根日志必须要被分配等级,如果一个日志没有被分配等级,则他的等级继承自离他最近的父辈的等级. 如果一个日志的申请等级小于其本身预设的等级, 则该日志请求被忽略.

Appenders部分:日志的输出目的地

log4j允许日志记录到多种地方,以log4j的说法,输出的目的地就叫做appender。一个logger可以附加多个appender。addappender方法向给定的logger增加一个appender,每次记下日志信息的时候,给定logger会将记录请求转发给他所有的appender,还有logger层次里上面层次的所有appender。

logger的log语句的输出会将日志吓到logger和他的所有祖先中的appender之中,这就是appender的增量含义,不过,如果logger的某个祖先把增量标记设置为false,那么logger的输出智慧影响到从logger到各级祖先知道增量标记为false的appender中,不会影响到之后的祖先。

Layout部分:日志的输出格式

3. 编译(此部分摘抄于网络,未验证)

         下载的原始压缩文件没有编译后的开发库,需要自行编译,编译时需要如下两个文件包:

apr-1.2.11-win32-src.zip 和 apr-util-1.2-1.0-win32-src.zip

分别下载地址为:

http://archive.apache.org/dist/apr/apr-1.2.11-win32-src.zip

http://archive.apache.org/dist/apr/apr-util-1.2.10-win32-src.zip

下载完成后将这两个文件分别解压缩到和上面源码相同的目录下,然后按照下面的步骤进行编译:

a. 将apr-1.2.11-win32-src.zip解压后的文件名修改为:apr

b. 将apr-util-1.2-1.0-win32-src.zip解压后的文件名修改为:apr-util

c. 通过vs2005的DOS工具进入DOS窗口,此处直接在运行命令栏中输入cmd也可(建议前者)

d. 使用cd命令进入apache-log4cxx-0.10.0目录

e. 输入configure命令,执行configure.bat批处理文件

f. 输入configure-aprutil命令,执行configure-aprutil.bat批处理文件

注意:由于在configure-aprutil.bat文件中使用了linux下的sed命令,所以该步可能会出现类似找不到sed命令的错误,这是由于在windows环境下编译的缘故。可以使用如下两种方法解决:1.下载一个sed for windows的工具;2.使用Cygwin;不过本人强烈推荐使用第二种方法,因为有些sed for windows的工具存在bug。关于如何在windows环境下安装Cygwin请看文章后名说明。

g. 使用vs2005打开Projects文件夹下的Log4cxx.dsw项目,将Log4cxx工程设为启动项目,然后编译

h. 编译成功后,就可以在Projects的Debug或者Release文件夹下看到lib和dll文件了

4. 环境设置

首先要包含Log4cxx的头文件库,然后下一步考虑使用静态链接库还是动态链接库。

若使用静态链接库:为预编译器定义LOG4CXX_STATIC宏,设置位置为"Project->Setting->C/C++->Categroy->Preprossor->Proprossor Definitions";为连接器指定依赖的库lib4cxxs.lib和Ws2_32.lib

若使用动态链接库:只需包含lib文件,然后将dll放到exe下即可。

5. 配置

通常使用配置文件来对Log4cxx进行配置,配置的主要内容就是上面的三点:等级,输出目的地,输出格式。

配置文件的基本格式如下:


#配置根Logger

log4j.rootLogger = [level], appenderName1, appenderName2,...

#配置日志输出目的地Appender

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1

......

log4j.appender.appenderName.optionN = valueN

#配置日志信息的格式

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1 = value1

......

log4j.appender.appenderName.layout.optionN = valueN


说明:

(1). [level]是日志的输出等级,共有5级:FATAL, ERROR, WARN, INFO, DEBUG

(2). Appender为日志输出的目的地,log4j提供的Appender有以下几种:

org.apache.log4j.ConsoleAppender (控制台)

org.apache.log4j.FileAppender (文件)

org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)

org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸时产生一个新的文件)

org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)

(3). Layout日志输出格式

org.apache.log4j.HTMLLayout (以HTML表格形式布局)

org.apache.log4j.Patternlayout (可以灵活地指定布局模式)

org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串)

org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等信息)

(4)打印参数

%m: 输出代码中指定的消息

%p: 输出优先级

%r: 输出自应用启动到输出该log信息耗费的毫秒数

%c: 输出说书的类目,通常就是所在类的全名

%t: 输出产生该日志时间的新成名

%n: 输出一个回车换行符

%d: 输出日志时间点的日期或时间

%l: 输出日志时间的发生位置

6. 使用示例

#include  " stdafx.h "
#include 
< log4cxx / logger.h >
#include 
< log4cxx / propertyconfigurator.h >
 
using   namespace  log4cxx;
 
int  _tmain( int  argc, _TCHAR *  argv[])
{
    
// 加载log4cxx的配置文件,这里使用了属性文件
    PropertyConfigurator::configure( " log4cxx.properties " );
    
    
// 获得一个Logger,这里使用了RootLogger
    LoggerPtr rootLogger  =  Logger::getRootLogger();
    
    
// 发出INFO级别的输出请求
    LOG4CXX_INFO(rootLogger, _T( " 它的确工作了 " ));
// rootLogger->info(_T("它的确工作了"));  // 与上面那句话功能相当
 
return   0 ;
}


参考网站
(1) http://www.360doc.com/relevant/98859742_more.shtml
(2) http://logging.apache.org/log4cxx/index.html
(3) http://www.cnblogs.com/adylee/archive/2008/09/04/1284004.html

你可能感兴趣的:(apache,log4j,windows,dos,layout,工具)