zoukankan      html  css  js  c++  java
  • 使用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已经完成了初步使用,但其中还有很多细节还没有深入研究,感兴趣的可以细细研究一下。
  • 相关阅读:
    1、编写一个简单的C++程序
    96. Unique Binary Search Trees
    python 操作redis
    json.loads的一个很有意思的现象
    No changes detected
    leetcode 127 wordladder
    django uwsgi websocket踩坑
    you need to build uWSGI with SSL support to use the websocket handshake api function !!!
    pyinstaller 出现str error
    数据库的读现象
  • 原文地址:https://www.cnblogs.com/danielStudy/p/6635468.html
Copyright © 2011-2022 走看看