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>configure

E:\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两个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=false
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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值