• 使用log4cxx


    在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
      • 1 #首先解压压缩包
        2 $ tar -zxvf apr-1.5.2.tar.gz
        3 $ cd apr-1.5.2
        4 
        5 $ ./configure --prefix=/usr/local
        6 $ make
        7 $ sudo make install
      • 安装apr-util
      • 1 #首先解压压缩包
        2 $ tar -zxvf apr-util-1.5.4.tar.gz
        3 $ cd apr-util-1.5.4
        4 
        5 $ ./configure --prefix=/usr/local --with-apr=/usr/local
        6 $ make
        7 $ sudo make install
      • 安装log4cxx
      • 1 $ tar -zxvf apache-log4cxx-0.10.0.tar.gz  
        2 $ cd apache-log4cxx-0.10.0  
        3 $ ./configuer --prefix=/usr/local/ --with-apr=/usr/local/ --with-apr-util=/usr/local/  --with-charset=utf-8 --with-logchar=utf-8  
        4 $ make
        5 $ 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模块就已经安装完了,接下来就可以写测试程序来测试是否成功了:测试程序如下:
      •  1 #include <log4cxx/logger.h>
         2 #include <log4cxx/basicconfigurator.h>
         3 #include <log4cxx/helpers/exception.h>
         4 #include <log4cxx/propertyconfigurator.h>
         5 
         6 using namespace log4cxx;
         7 using namespace log4cxx::helpers;
         8 
         9 LoggerPtr logger_file(Logger::getLogger("file"));//获取配置文件中file对应的句柄
        10 LoggerPtr logger_file(Logger::getLogger("console"));//获取配置文件中console对应的句柄
        11 
        12 int main(){
        13     PropertyConfigurator::configure("./log4cxx.properties");//加载配置文件,下面会细说
        14     LOG4CXX_INFO(logger_file,"This is a test");
        15   
        16     return 0;
        17 }
      • 那么这个配置文件到底是啥呢,其实日志模块是会分为很多级别:建议使用的有四个level,分别是INFO、DEBUG、ERROR和WARN,level可以在配置文件中配置,用来控制程序中相应级别的日志的开关,比如配置文件中设置的INFO级别,那么程序中的DEBUG级别的日志就不会输出
      • 配置文件是自己写的,只要在程序中给出配置文件的路径就可以:
      • log4cxx.properties:
      •  1 #设置日志level为INFO,fa为文件输出对象,ca为控制台输出对象
         2 log4j.rootLogger=INFO,fa,ca
         3 #设置日志对象
         4 log4j.logger.console=INFO,ca
         5 log4j.logger.file=INFO,fa
         6 #不向默认对象(rootLogger)输出,因此信息只能输出到文件
         7 log4j.additivity.file=false
         8 
         9 #**************************  
        10 #控制台,同时也会输出到默认输出对象  
        11 #**************************
        12 log4j.appender.ca=org.apache.log4j.ConsoleAppender  
        13 log4j.appender.ca.layout=org.apache.log4j.PatternLayout  
        14 log4j.appender.ca.layout.ConversionPattern=[%-5p][%d] : %m%n 
        15 
        16 #**************************  
        17 #设置日志文件信息,比如大小,时间格式
        18 #**************************  
        19 log4j.appender.fa=org.apache.log4j.DailyRollingFileAppender  
        20 log4j.appender.fa.File=./log/today.log  
        21 log4j.appender.fa.Append=fasle  
        22 log4j.appender.fa.MaxFileSize=10MB  
        23 log4j.appender.fa.MaxBackupIndex=1000  
        24 log4j.appender.fa.DatePattern=yyyy-MM-dd  
        25 log4j.appender.fa.layout=org.apache.log4j.PatternLayout  
        26 log4j.appender.fa.layout.ConversionPattern=[%-5p][%d] : %m%n                                                            
      • 接下来就可以编译执行了:
      • 1 g++ test.cpp -o test 
      • 会发现大量的报错,提示Undefined refrence ******,这是由于编译需要连接一下log4cxx的库文件,库文件可以使用vs编译生成,如果不想自己编译的话也可以用我的:http://pan.baidu.com/s/1qYprlPa

      • 1 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环境变量造成的,所以只需要配置一下环境变量即可:
      • 1 export LD_LIBRARY_PATH=/usr/local/lib
      • 重新运行一下就发现不会报错了,此时在当前目录下会产生一个log文件夹,里面会有一个test.log,cat一下看一下输出:
      • 1 [INFO ][2017-03-28 16:25:19,512] : this is a test
      • 到这里log4cxx已经完成了初步使用,但其中还有很多细节还没有深入研究,感兴趣的可以细细研究一下。
  • 相关阅读:
    hdu 1077计算几何
    hdu 1110几何题
    hdu 4430二分枚举
    numpy常用技巧
    python中数组(list/array)不会复制,而是直接引用
    怎么在ASP.NET 2.0中使用Membership
    2分法通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高)
    Oracle大数据量分页通用存储过程
    JavaScript 对象与数组参考大全
    ajax框架比较
  • 原文地址:https://www.cnblogs.com/danielStudy/p/6635468.html
Copyright © 2020-2023  润新知