Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4604772
  • 博文数量: 671
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 7310
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-14 09:56
文章分类

全部博文(671)

文章存档

2011年(1)

2010年(2)

2009年(24)

2008年(271)

2007年(319)

2006年(54)

我的朋友

分类: C/C++

2009-02-18 16:30:22

1.介绍
Log4cxx是开放源代码项目Apache Logging Service的子项目之一,是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。
有关log4cxx的更多信息可以从Apache Logging Service的网站获得。当前的稳定版本为0.9.7,本文内容及示例代码都是基于此版本。此外,示例代码的编译环境为Windows环境中的Microsoft Visual C++ .Net 2003。
2.编译
在此例中一律使用vc6.0实现,也可以使用vs2003编译.由于发行包不含编译后的代码,所以首先我们需要编译他的静态库和动态库.在Msvc中.
| Msvc\static:该工程产生log4cxx的静态链接库(lib4cxx.lib和lib4cxxs.lib);
| Msvc\dll:该工程产生log4cxx的动态链接库(lib4cxx.dll);
注意: 编译路径中不能含有带空格的文件夹.因为在unix系统中这是不允许的.所以在编译时最好选一个根目录放置进行编译.
5.配置环境
新建一个工程,设置vc编译环境的包含路径和静态库路径(工具->option->目录)将前面的三个文件包含进去.
注意: 同时还要加上的是"项目->setting->C/C++->项目预处理定义"中要加上",UNICODE".
4.示例代码
[code]

// log4cppTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include
#include
#include
#include
using namespace log4cxx;
using namespace log4cxx::helpers;

int main(int argc, char* argv[])
{
 String msg = _T("e:\\log4cppTest\\log4cxx.properties");
 
 LoggerPtr rootLogger = Logger::getRootLogger();

 log4cxx::PropertyConfigurator::configure(msg);

 rootLogger->info(_T("Entering application."));

 //LOG4CXX_INFO(rootLogger, _T("他的确工作了"));

 return 0;
}

[/code]

新建一个文本文件,命名为log4cxx.properties,并键入如下内容:

[code]

# 设置root logger为DEBUG级别,使用了ca和fa两个Appender
log4j.rootLogger=DEBUG, ca, fa
 
#对Appender fa进行设置:
# 这是一个文件类型的Appender,
# 其输出文件(File)为./output.log,
# 输出方式(Append)为覆盖方式,
# 输出格式(layout)为PatternLayout
log4j.appender.fa=org.apache.log4j.FileAppender
log4j.appender.fa.File=./output.log
log4j.appender.fa.Append=true
log4j.appender.fa.layout=org.apache.log4j.PatternLayout
log4j.appender.fa.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n
 
#对Appender ca进行设置:
# 这是一个控制台类型的Appender
#  输出格式(layout)为PatternLayout
log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n

[/code]

复制log4cxx.dll到输出目录。在动态链接方式下,应用程序需要能够找到这个库文件。

运行生成的文件,查看一下运行结果.

注:log4cxx在代码中含有一个漏洞,如果使用LOG4CXX.INFO(*)会造成内存溢出,但使用rootlogger->info(*)没有这个问题.

log4j.rootLogger=DEBUG,CONSOLE,FILE,DAILY_FILE,testAppender
log4j.addivity.org.apache=true

# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n

# 应用于文件回滚
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.Threshold=DEBUG
log4j.appender.FILE.File=log/FILE.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.MaxFileSize=10240KB
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n

# 每天产生日志
log4j.appender.DAILY_FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DAILY_FILE.file=log/DAILY_FILE.log
log4j.appender.DAILY_FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.DAILY_FILE.Append=true
log4j.appender.DAILY_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.DAILY_FILE.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n

# 测试
log4j.appender.testAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.testAppender.file=log/obsoleteDRFA-test1.log
log4j.appender.testAppender.DatePattern='.'yyyy-MM-dd_HH_mm_ss
log4j.appender.testAppender.Append=true
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.testAppender.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n

阅读(2061) | 评论(0) | 转发(0) |
0

上一篇:pdf eps

下一篇:虚拟打印驱动介绍

给主人留下些什么吧!~~