在java中有log4j日志模块,使用起来非常方便,在C++中也是有的,log4cxx就是log4j的c++移植版,机缘巧合之下今天想要使用一下这个日志模块,所以记录下自己从一开始下载安装到成功使用的过程:

  • 首先是下载文件,一共有三个安装包,apr、apr-util和log4cxx,可以去官网下载,地址分别为:

    • apr和apr-util:http://apr.apache.org/
    • log4cxx:http://logging.apache.org/log4cxx/latest_stable/download.html
  • 如果觉得麻烦也可以去我的网盘下载:http://pan.baidu.com/s/1o7PCR70
  • 然后开始安装:
    • 安装apr
    •  #首先解压压缩包
      $ tar -zxvf apr-1.5.2.tar.gz
      $ cd apr-1.5.2 $ ./configure --prefix=/usr/local
      $ make
      $ sudo make install
    • 安装apr-util
    •  #首先解压压缩包
      $ tar -zxvf apr-util-1.5.4.tar.gz
      $ cd apr-util-1.5.4 $ ./configure --prefix=/usr/local --with-apr=/usr/local
      $ make
      $ sudo make install
    • 安装log4cxx
    •  $ tar -zxvf apache-log4cxx-0.10.0.tar.gz
      $ cd apache-log4cxx-0.10.0
      $ ./configuer --prefix=/usr/local/ --with-apr=/usr/local/ --with-apr-util=/usr/local/ --with-charset=utf-8 --with-logchar=utf-8
      $ make
      $ sudo make install
    • Tips:执行到这里的时候我这里报错:
    • 1 inputstreamreader.cpp:66: error: 'memmove' was not declared in this scope
      2 make[3]: *** [inputstreamreader.lo] 错误 1
      #这是由于以下几个文件缺少了标准库文件,添加上就可以了
      3 src/main/cpp/inputstreamreader.cpp添加#include <string.h>
      4 src/main/cpp/socketoutputstream.cpp添加#include <string.h>
      5 src/examples/cpp/console.cpp添加#include <string.h>;#include <stdio.h>;
    • 添加完标准库文件make之后整个log4cxx模块就已经安装完了,接下来就可以写测试程序来测试是否成功了:测试程序如下:
    •  #include <log4cxx/logger.h>
      #include <log4cxx/basicconfigurator.h>
      #include <log4cxx/helpers/exception.h>
      #include <log4cxx/propertyconfigurator.h> using namespace log4cxx;
      using namespace log4cxx::helpers; LoggerPtr logger_file(Logger::getLogger("file"));//获取配置文件中file对应的句柄
      LoggerPtr logger_file(Logger::getLogger("console"));//获取配置文件中console对应的句柄 int main(){
      PropertyConfigurator::configure("./log4cxx.properties");//加载配置文件,下面会细说
      LOG4CXX_INFO(logger_file,"This is a test"); return ;
      }
    • 那么这个配置文件到底是啥呢,其实日志模块是会分为很多级别:建议使用的有四个level,分别是INFO、DEBUG、ERROR和WARN,level可以在配置文件中配置,用来控制程序中相应级别的日志的开关,比如配置文件中设置的INFO级别,那么程序中的DEBUG级别的日志就不会输出
    • 配置文件是自己写的,只要在程序中给出配置文件的路径就可以:
    • log4cxx.properties:
    •  #设置日志level为INFO,fa为文件输出对象,ca为控制台输出对象
      log4j.rootLogger=INFO,fa,ca
      #设置日志对象
      log4j.logger.console=INFO,ca
      log4j.logger.file=INFO,fa
      #不向默认对象(rootLogger)输出,因此信息只能输出到文件
      log4j.additivity.file=false #**************************
      #控制台,同时也会输出到默认输出对象
      #**************************
      log4j.appender.ca=org.apache.log4j.ConsoleAppender
      log4j.appender.ca.layout=org.apache.log4j.PatternLayout
      log4j.appender.ca.layout.ConversionPattern=[%-5p][%d] : %m%n #**************************
      #设置日志文件信息,比如大小,时间格式
      #**************************
      log4j.appender.fa=org.apache.log4j.DailyRollingFileAppender
      log4j.appender.fa.File=./log/today.log
      log4j.appender.fa.Append=fasle
      log4j.appender.fa.MaxFileSize=10MB
      log4j.appender.fa.MaxBackupIndex=1000
      log4j.appender.fa.DatePattern=yyyy-MM-dd
      log4j.appender.fa.layout=org.apache.log4j.PatternLayout
      log4j.appender.fa.layout.ConversionPattern=[%-5p][%d] : %m%n
    • 接下来就可以编译执行了:
    •  g++ test.cpp -o test 
    • 会发现大量的报错,提示Undefined refrence ******,这是由于编译需要连接一下log4cxx的库文件,库文件可以使用vs编译生成,如果不想自己编译的话也可以用我的:http://pan.baidu.com/s/1qYprlPa

    •  g++ test.cpp -o test -llog4cxx
    • 执行到这里,居然还是报错,这次是报错:error while loading shared libraries: liblog4cxx.so.10: cannot open shared object file: No such file or directory,这个报错是因为在/usr/local/lib下有liblog4cxx.so.10文件,而没有设置LD_LIBRARY_PATH环境变量造成的,所以只需要配置一下环境变量即可:
    •  export LD_LIBRARY_PATH=/usr/local/lib
    • 重新运行一下就发现不会报错了,此时在当前目录下会产生一个log文件夹,里面会有一个test.log,cat一下看一下输出:
    •  [INFO ][2017-03-28 16:25:19,512] : this is a test
    • 到这里log4cxx已经完成了初步使用,但其中还有很多细节还没有深入研究,感兴趣的可以细细研究一下。

使用log4cxx的更多相关文章

  1. log4cxx

    1.简介 (1)Apache log4cxx当前是由Apache软件基金会进行维护.它是java中著名开源项目Apache log4j在c++中对应的日志框架.它是借助于APR(Apache Port ...

  2. how to build apache log4cxx 0.10 by Visual Studio 201*

    Chapter 1 Official Steps  We are going to follow the steps here, http://logging.apache.org/log4cxx/b ...

  3. windows 下编译log4cxx(x64)

    参考链接 http://blog.csdn.net/hnu_zxc/article/details/7786060 http://blog.chinaunix.net/uid-20384806-id- ...

  4. 在RHEL5.2 64bit下编译安装log4cxx错误

    apache-log4cxx.0.10.0 依赖于apache-apr和apache-apr-utils两个包 先安装他们俩,然后编译log4cxx,发现make失败,错误如下 ronized.o . ...

  5. log4cxx安装和使用

    log4cxx是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计,log4cxx是apache软件基金会的开源项目,基于APR实现跨平台支持 ...

  6. Apache log4cxx用法

    一个好的系统通常需要日志输出帮助定位问题 .Apache基金会的log4cxx提供的完善的Log分级和输出功能.所以准备把该Log模块加入的系统中. 使用log4cxx需要满足一下功能: 1.提供日志 ...

  7. log4cxx在vs2013的静态编译

    网络上找了一圈,结果都是通过修改代码来编译,做为强迫症患者接受不了这种修改代码却无法预知代码带来影响的方式,而且没有静态编译的方法,为了方便其他人后续不在走弯路,提供自己的编译方法. 虽然最终的目的是 ...

  8. 使用log4cxx在GUI 程序中将信息输出到Console

    之前看到有个方法是在项目属性设置里实现的 以VS2010为例: 右键Project选择Properties->Configuration Properties->Build Events- ...

  9. log4cxx 使用代码进行配置

    (1)官网的一个例子 #include <log4cxx/logger.h> #include <log4cxx/helpers/pool.h> #include <lo ...

  10. log4cxx入门第一篇--一个小例子

    先看官网:http://logging.apache.org/log4cxx/index.html 转载自:http://wenku.baidu.com/view/d88ab5a9d1f34693da ...

随机推荐

  1. java分词技术(自动提取关键词,段落大意)hanlp

    这是老师大作业需要的技术才知道hanlp这个外部包  使用方法 包以及数据如下GIT下载很慢我传百度云了   链接:https://pan.baidu.com/s/14a22v1g_CAQN-G-k8 ...

  2. dedecms 栏目目录用首字母生成的方法

    修改dede/catalog.add.php文件 85行 $toptypedir = GetPinyin(stripslashes($toptypename)); 修改为 $toptypedir = ...

  3. Docker-harbor-V1.3.0 ”私有仓库“搭建 Easy

    准备: centos     7.0 Docker version 1.12.6    docker-compose version 1.19.0   1: updata-yum:   更新yum 源 ...

  4. Golang的循环结构-for语句

    Golang的循环结构-for语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.for循环语法 循环结构在生活中的场景也非常的多,比如: ()上班族们每天朝九晚五的生活; ( ...

  5. 验证试验 更改了从机CAN通信的MAC地址 从机新挂CAN网络 上电自检通过

    更改前 该之后 主机程序 与 从机 程序 已经上传到网盘上 ,主机和从机程序基本一致, 唯一的区别是 从机更好了MAC地址 为0X10  主机的固定MAC地址为 0X1F 改程序的配置上设置的是双滤波 ...

  6. tomcat端口号被占用,且杀进程不能够杀掉解决办法

    在电脑上安装了zookeeper以后,配置好tomcat启动发现端口号8009端口号被占用,报错如下: 采用netstat –ano 查询所有进程查看或者根据端口号查进程netstat -ano |f ...

  7. JVM探秘:jstack查看Java线程状态

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. jstack命令可以打印Java进程的各个线程堆栈跟踪信息,可以用来查看Java中各个 ...

  8. 一百零五、SAP中ALV事件之十七,让ALV表格修改后保存到数据库

    一.我们来到代码界面设置保存按钮的代码 二.i_grid_settings这个属性用来编辑单元格之后,返回给程序编辑后的值 三.我们双击点  'REUSE_ALV_GRID_DISPLAY',来到定义 ...

  9. 083-PHP的foreach循环

    <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } print_r($a ...

  10. 吴裕雄--天生自然C++语言学习笔记:C++ 引用

    引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量 C++ 引用 vs 指针 引用很容易与指针混淆,它们之间有三个主要的 ...