log4cplus日志系统 一站式安装说明与测试程序编写
简介
log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统.受Apache Software License保护。作者是Tad E. Smith。log4cplus具有线程安全
、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期; 你可以选择将信息输出到屏幕、文件、NT event log、甚至是远程服务器;通过指定策略对日志进行定期备份等等。
下载地址
https://github.com/wilx/log4cplus
安装说明
Linux
Git clone https://github.com/wilx/log4cplus --recursive
Cd log4cplus
./configure
make
make install
安装成功
接下来将上面的Lib地址里的文件全部复制到/usr/lib/里
cp -r Lib地址 /usr/lib
问题汇总
1、GCC编译器版本过低
这里提供一个最简单的GCC升级方法:使用Yum升级
yum install centos-release-scl -y
yum install devtoolset-8 -y //安装GCC8
scl enable devtoolset-8 bash
gcc –version
2、AutoMake版本过低,需要1.16
这个问题比较麻烦,下面这些安装一下
安装m4
wget http://mirrors.kernel.org/gnu/m4/m4-1.4.18.tar.gz
&& tar -xzvf m4-1.4.18.tar.gz
&& cd m4-1.4.18
&& ./configure –prefix=/usr/local
make && make install
cd ..
安装autoconf
wget http://mirrors.kernel.org/gnu/autoconf/autoconf-2.69.tar.gz
&& tar -xzvf autoconf-2.69.tar.gz
&& cd autoconf-2.69
&& ./configure –prefix=/usr/local
make && make install
cd ..
安装automake
wget http://mirrors.kernel.org/gnu/automake/automake-1.16.tar.gz
&& tar xzvf automake-1.16.tar.gz
&& cd automake-1.16
&& ./configure –prefix=/usr/local
make && make install
cd ..
如果automake-1.16 make出现如下错误
help2man: can’t get --help' info from automake-1.16 Try
–no-discard-stderr’ if option outputs to stderr
make: *** [doc/automake-1.16.1] 错误 255
直接修改
vi Makefile
在 3694行 的末尾加上 –no-discard-stderr 修改后如下:
doc/aclocal-$(APIVERSION).1: $(aclocal_script) lib/Automake/Config.pm
$(update_mans) aclocal-$(APIVERSION)
doc/automake-$(APIVERSION).1: $(automake_script) lib/Automake/Config.pm
$(update_mans) automake-$(APIVERSION) –no-discard-stderr
make && make install 编译通过
安装libtool
wget http://mirrors.kernel.org/gnu/libtool/libtool-2.4.6.tar.gz
&& tar xzvf libtool-2.4.6.tar.gz
&& cd libtool-2.4.6
&& ./configure –prefix=/usr/local
make && make install
cd ..
3、丢失ThreadPool.h
src/global-init.cxx:44:10: fatal error: ThreadPool.h: 没有那个文件或目录
include “ThreadPool.h”
^~~~~~~~~~~~~~
compilation terminated.
make2: *** [Makefile:2709:src/liblog4cplus_la-global-init.lo] 错误 1
make2: 离开目录“/home/lusky/log4cplus”
make1: *** [Makefile:3757:all-recursive] 错误 1
make1: 离开目录“/home/lusky/log4cplus”
make: *** [Makefile:1591:all] 错误 2
如果是用git clone克隆的log4cplus,那么只需要再克隆子模块就好了。
```git submodule update --init --recursive```
默认的lib库路径是/usr/local/lib/,头文件的位置是:/usr/local/include/log4cplus
将/usr/local/lib下的和log4cplus相关的库都拷贝到/usr/lib,将头文件加到/etc/profile下的CPLUS_INCLUDE_PATH
4、automake出现错误
configure.ac:29: error: version mismatch. This is Automake 1.16.1,
configure.ac:29: but the definition used by this AM_INIT_AUTOMAKE
configure.ac:29: comes from Automake 1.16. You should recreate
configure.ac:29: aclocal.m4 with aclocal and run automake again.
编译的时候报错,解决方法如下
第一步 :
```autoscan```
用 autoscan 产生一个 configure.in 的原型,执行autoscan 后会产生一个configure.scan 的文件,可以用它作为 configure.in文件的蓝本。
第二步:
aclocal
autoconf
执行 aclocal 和 autoconf ,分別会产生 aclocal.m4 及 configure 两个文件
然后执行:
``` automake –add-missing```
最后执行:
``` ./configure```
之后执行```make&&make install``` 继续后面的步骤
5、make的时候出现模块加载失败
注释带哦提示中对应文件中的对应行号(取消xx加载模块)
### 使用教程
include <log4cplus/log4cplus.h>
include
include
using namespace std;!
using namespace log4cplus;
int main()
{
log4cplus::Initializer initializer;//初始化
log4cplus::SharedAppenderPtr appender(new log4cplus::ConsoleAppender());
appender->setName(LOG4CPLUS_TEXT(“console”));
appender->setLayout(std::unique_ptrlog4cplus::Layout(new log4cplus::SimpleLayout));
Logger logger=Logger::getInstance(LOG4CPLUS_TEXT(“test”));
logger.setLogLevel(log4cplus::INFO_LOG_LEVEL);
logger.addAppender(appender);
LOG4CPLUS_INFO(logger,LOG4CPLUS_TEXT(“Hello world!”));
return 0;
}
最简单的实验代码,打开vi输入后编译
g++ -std=c++17 -llog4cplus -o main main.cpp
```
运行后如果提醒找不到动态库,那么说明动态库没有导入到linux里面。
检查/etc/ld.so.conf文件,如果其中缺少/usr/local/lib 目录,就添加进去;
注意:在修改了/etc/ld.so.conf
文件或者在系统中安装了新的函数库之后,需要运行命令 ldconfig
,该命令用来刷新系统的共享库缓存,即 /etc/ld.so.cache
文件。为了减少共享库系统的库搜索时间,共享库系统维护了一个共享库so名称的缓存文件/etc/ld.so.cache
。 因此,在安装新的共享库之后,一定要运行 ldconfig
刷新该缓存。