Log4Cxx 的使用方法

来源:互联网 发布:上海微知软件集团 编辑:程序博客网 时间:2024/05/23 22:56

Log4Cxx 的使用方法

1 Log4cxx 介绍

Log4Cxx 是 Apache 软件基金会的产物,算是 log4j 比较根正苗红的产物。

如果能用一个好用的日志类来在程序里对程序进行追踪,将对工程的开发与调试,大有裨益。

2 Windows 下的编译与使用方法

对于我们来说,我们 C++ 程序员希望 log 类具有以下几种特点:

  1. 彩色输出,即根据 debug 或 info 这样的情形,输出不同色彩的 log;
  2. 要简洁,支持跨平台。

2.1 Log4Cxx 在 Windows 下的编译

Apache log4cxx 有官方文档专门讲述如何在 Visual Studio 里编译 log4cxx,log4cxx 在 Visual Studio 里的编译并不难,可是,还是有许多需要注意的地方。

下载的原始文件包中没有包含编译后的开发库,需要自己编译生成,本文使用vc.net2003编译该源文件,编译时需要如下文件包:

apr-1.2.11-win32-src.zip和apr-util-1.2.10-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.10-win32-src.zip解压后的文件名修改为:apr-util

c. 通过vc.net2003的DOS工具进入DOS窗口,此处直接在运行命令栏中输入cmd也可,不过为安全起见最后从.net2003的工具栏进入DOS界面

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

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

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

在运行 configure 命令的时候,正常情况应该会出现如下情况:

E:\test\apache-log4cxx-0.10.0>configureE:\test\apache-log4cxx-0.10.0>ECHO OFF已复制         1 个文件。已复制         1 个文件。

当运行 configure-aprutil 的时候,出现如下错误:

E:\test\apache-log4cxx-0.10.0>ECHO OFF'sed' 不是内部或外部命令,也不是可运行的程序或批处理文件。'sed' 不是内部或外部命令,也不是可运行的程序或批处理文件。E:\test\apache-log4cxx-0.10.0>configure-aprutil

由于在 configure-aprutil.bat 文件中使用了 Linux 下的 sed 命令,所以该步可能会出现类似找不到 sed 命令的错误,这是由于在 Windows 环境下编译的缘故。可以使用如下三种方法解决:

  1. 下载一个sed for windows的工具;
  2. 使用Cygwin,在 Cygwin 里切换到 log4cxx 目录,再运行 configure-aprutil.bat;
  3. 手动修改 apr-util\include\apu.hw 里的内容
#define APU_HAVE_APR_ICONV      1

改为

#define APU_HAVE_APR_ICONV      0

不过浏忙绪绪强烈推荐使用第二种方法,既简单又方便。

现在你应该可以顺便地在 Windows 平台上用 Visual Studio 编译 log4cxx 了,到目录

\apache-log4cxx-0.10.0\projects

里打开工程 log4cxx.dsw 编译后会生成库文件 log4cxx.lib 和 log4cxx.lib,当然,你需要针对 release 和 debug 两个版本进行编译。

然后把这些东西整理成可链接的代码:

apache-log4cxx-0.10.0\src\main\include

以及 release 和 debug 编译出来的动态链接库。

实例代码:

a.打开 VS2005,新建一个空白的win32控制台工程,假设工程名为Test

b.添加一个cpp文件,文件名随便命名

c.右键点击Test工程,选择”属性”,然后在C++选项卡中添加附加包含目录,注意该目录为../ apache-log4cxx-0.10.0\src\main\include

附加库目录也应该设置为 XXXX

d.在属性的链接器输入选项卡的”附加依赖项”中添加” log4cxx.lib”

2.2 问题

提示如下错误:

错误    47      fatal error C1083: 无法打开包括文件:“apr.h”: No such file or directory        e:\test\apache-log4cxx-0.10.0\src\main\cpp\class.cpp    74

可以直接把 /apr/include/apr.h 这个文件改为 apr.h 即可。

同样,还有会提示如下错误的话:

错误    47      fatal error C1083: 无法打开包括文件:“apu.h”: No such file or directory        e:\test\apache-log4cxx-0.10.0\src\main\cpp\class.cpp    74

可以直接把 /apr-util/include/apu.hw 这个文件改为 apu.h

3 使用方法

把头文件包含进去,再链接库文件,再用下面的代码试一下:

#include "log4cxx/logger.h"#include "log4cxx/basicconfigurator.h"#include "log4cxx/helpers/exception.h"using namespace std;using namespace log4cxx;using namespace log4cxx::helpers;int _tmain(int argc, _TCHAR* argv[]){        ///@todo 重定向到文件   LoggerPtr logger(Logger::getLogger("MyApp"));   try   {       BasicConfigurator::configure();       LOG4CXX_INFO(logger, _T("hello"));       LOG4CXX_DEBUG(logger, "world");           int x = 0;           for ( x; x < 100; x++ )           {                   LOG4CXX_INFO();           }   }   catch (Exception&)   {   }   return 0;}

3.1 如何重定向一个 log 到文件?

如果需要把日志同时输出到命令行及定向到文件,则需要使用如下测试代码:

#include "log4cxx/logger.h"#include "log4cxx/PropertyConfigurator.h"using namespace std;using namespace log4cxx;using namespace log4cxx::helpers;int _tmain(int argc, _TCHAR* argv[]){        ///@todo 重定向到文件    string trace = "fa";    string Property = "./log4cxx.properties";    log4cxx::PropertyConfigurator::configure(Property);    LoggerPtr logger = Logger::getLogger(trace);    logger->info(("How to use?"));    LOG4CXX_INFO(logger, ("你说hello"));    for(int i = 0; i < 2; i++)    {        LOG4CXX_DEBUG(logger, "DEBUG");        LOG4CXX_INFO(logger, "INFO");         LOG4CXX_WARN(logger, "WARN");        LOG4CXX_ERROR(logger, "ERROR");    }    return 0;}

同时,在程序的可执行目录里,添加名为 log4cxx.properties 的文本文件,并键入如下内容:

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

将编译好的 log4cxx.lib 和 log4cxx.dll 及上面的 log4cxx.properties 文件拷贝到编译目录下,编译运行该文件,可以看到控制台输出相关日志,并且在工程目录下会得到一个 output.log 的日志文件。


原创粉丝点击