简介

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

安装成功
log4cplus.png

接下来将上面的Lib地址里的文件全部复制到/usr/lib/里
cp -r Lib地址 /usr/lib

问题汇总

1、GCC编译器版本过低

error: *** A compiler with support for C++17 language features is required.```说明GCC的编译器版本太低了,不支持C++17.可以在github上查看支持的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

```
TIM图片20191212182847.png

运行后如果提醒找不到动态库,那么说明动态库没有导入到linux里面。
检查/etc/ld.so.conf文件,如果其中缺少/usr/local/lib 目录,就添加进去;
注意:在修改了/etc/ld.so.conf 文件或者在系统中安装了新的函数库之后,需要运行命令 ldconfig ,该命令用来刷新系统的共享库缓存,即 /etc/ld.so.cache 文件。为了减少共享库系统的库搜索时间,共享库系统维护了一个共享库so名称的缓存文件/etc/ld.so.cache 。 因此,在安装新的共享库之后,一定要运行 ldconfig刷新该缓存。